OpenShift应用镜像构建(3) - Jenkins的流水线构建
Jenkins方式构建的定位是使用专门的CICD平台。
既支持把JenKins作为一个Pod部署到openshift内部,也支持部署在Openshift集群外部,操作上的区别是
- openshift自己内部带的jenkins images包含了openshift的plugin
- Jenkins放在openshift外,需要手工安装plugin了。具体的安装过程可以参考
- https://blog.openshift.com/using-openshift-pipeline-plugin-external-jenkins/
为了演示方便仍然直接用openshift里面的imagestream了
jenkins Plugin能直接触发openshift的构建和部署过程, 同时最吸引的特点是:
- 支持流水线Pipeline这种模式,便于在同一集群的多个项目(对应开发,测试,生产)环境或者多个集群(对应开发集群,Stage集群,生产集群)中进行发布。
- 流水线支持自定义不同的阶段,每个阶段完成不同的任务,比如可以定义阶段为: CI环境部署->Stage环境部署->Prd部署
- 一条流水线支持包含多个微服务,针对项目中包含多个微服务,一旦定制好流水线,就可以重复运行
1.安装jenkins
CDK安装完成后暂时直接用里面带的Jenkins ImageStream
oc new-project ci
然后界面上部署jenkins,如果部署失败,除了删除deployment,service,route外,还需要删除ServiceAccount(jenkins),rolebinding(jenkins_edit)和pvc jenkins
ericdeMacBook-Pro:openshift-tomcat ericnie$ oc get sa;
NAME SECRETS AGE
builder 7h
default 7h
deployer 7h
jenkins 7h
ericdeMacBook-Pro:openshift-tomcat ericnie$ oc get rolebinding;
NAME ROLE USERS GROUPS SERVICE ACCOUNTS SUBJECTS
admin /admin developer
jenkins_edit /edit jenkins
system:deployers /system:deployer deployer
system:image-builders /system:image-builder builder
system:image-pullers /system:image-puller system:serviceaccounts:ci
ericdeMacBook-Pro:openshift-tomcat ericnie$ oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jenkins Bound pv0012 100Gi RWO,ROX,RWX 7h
部署完成后,通过命令行查看
ericdeMacBook-Pro:openshift-tomcat ericnie$ oc get all
NAME REVISION DESIRED CURRENT TRIGGERED BY
deploymentconfigs/jenkins config,image(jenkins:) NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
routes/jenkins jenkins-ci.192.168.99.100.nip.io jenkins <all> edge/Redirect None NAME READY STATUS RESTARTS AGE
po/jenkins--f5gk7 / Running 7h NAME DESIRED CURRENT READY AGE
rc/jenkins- 7h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/jenkins ClusterIP 172.30.182.209 <none> /TCP 7h
svc/jenkins-jnlp ClusterIP 172.30.154.212 <none> /TCP 7h
点击链接跳转
授权其他项目访问
出现jenkins主页面
2.构建项目和Openshift集成
建立一个项目,选择
在构建处选择Trigger OpenShift Build,然后填入相关的选项
同时把jenkins用户加入访问命名空间的权限
oc policy add-role-to-user edit system:serviceaccount:ci:jenkins -n s2i-tomcat
手工触发立即构建后,触发s2i-tomcat项目的构建,同时把镜像更新到depolyment
3.pipeline流水线构建
建立一个pipeline文件
ericdeMacBook-Pro:pipeline ericnie$ cat s2itomcat-pipeline.yaml
apiVersion: v1
kind: BuildConfig
metadata:
annotations:
pipeline.alpha.openshift.io/uses: '[{"name": "s2itomcat", "namespace": "s2i-tomcat", "kind":
"DeploymentConfig"}]'
creationTimestamp: null
labels:
app: jenkins-pipeline-development
name: s2itomcat-development-pipeline
template: application-template-development-pipeline
name: s2itomcat-development-pipeline
spec:
output: {}
postCommit: {}
resources: {}
runPolicy: Serial
source:
type: None
strategy:
jenkinsPipelineStrategy:
jenkinsfile: |-
node('maven') {
stage 'build'
openshiftBuild(buildConfig: 's2itomcat', showBuildLogs: 'true', namespace: 's2i-tomcat')
stage 'deploy'
openshiftDeploy(deploymentConfig: 's2itomcat', namespace: 's2i-tomcat')
}
type: JenkinsPipeline
triggers:
- github:
secret: secret101
type: GitHub
- generic:
secret: secret101
type: Generic
status:
lastVersion:
切换到jenkins所在的项目ci, 然后通过命令行建立
ericdeMacBook-Pro:pipeline ericnie$ oc create -f s2itomcat-pipeline.yaml
buildconfig "s2itomcat-development-pipeline" created
可以看到在jenkins界面上基于OpenShift的CI project创建了一个pipeline
授权
ericdeMacBook-Pro:pipeline ericnie$ oc policy add-role-to-user edit system:serviceaccount:ci:jenkins -n s2i-tomcat
role "edit" added: "system:serviceaccount:ci:jenkins"
在openshift console中start pipeline开始构建,完成后可以看见s2itomcat项目deployment的更新。
每次构建jenkins会启动一个新的maven pod,然后进行构建工作,构建完成后会将pod删除。
4.一条流水线多组件部署配置
在实际项目中存在一条流水线构建多个组件,同时需要部署多个镜像和微服务的场景,因此下面这个例子演示一下多组件的流水线构建过程。
还是相同的项目,我们再建立一个组件nodejs-example
ricdeMacBook-Pro:minishift ericnie$ oc new-app https://raw.githubusercontent.com/ericnie2015/nodejs-ex/master/openshift/templates/nodejs-dev.json
--> Deploying template "s2i-tomcat/nodejs-example" for "https://raw.githubusercontent.com/ericnie2015/nodejs-ex/master/openshift/templates/nodejs-dev.json" to project s2i-tomcat Node.js
---------
An example Node.js application with no database. For more information about using this template, including OpenShift considerations, see https://github.com/openshift/nodejs-ex/blob/master/README.md. The following service(s) have been created in your project: nodejs-example. For more information about using this template, including OpenShift considerations, see https://github.com/openshift/nodejs-ex/blob/master/README.md. * With parameters:
* Name=nodejs-example
* Namespace=openshift
* Memory Limit=512Mi
* Git Repository URL=https://github.com/alezzandro/nodejs-ex.git
* Git Reference=
* Context Directory=
* Application Hostname=
* GitHub Webhook Secret=gk0fyAeT43s368qQIxkGvoeHbphK7XKkSXOMHKnf # generated
* Generic Webhook Secret=4rWULbanlnwLsm8x38S0BACQKxCwfvpnKrARfSUn # generated
* Database Service Name=
* MongoDB Username=
* MongoDB Password=
* Database Name=
* Database Administrator Password=
* Custom NPM Mirror URL= --> Creating resources ...
service "nodejs-example" created
route "nodejs-example" created
imagestream "nodejs-example" created
buildconfig "nodejs-example" created
deploymentconfig "nodejs-example" created
--> Success
Access your application via route 'nodejs-example-s2i-tomcat.192.168.99.100.nip.io'
Use 'oc start-build nodejs-example' to start a build.
Run 'oc status' to view your app.
现在项目中的bc和dc分别包括
ericdeMacBook-Pro:minishift ericnie$ oc get dc
NAME REVISION DESIRED CURRENT TRIGGERED BY
myapp config,image(s2itomcat:latest)
nodejs-example
s2itomcat config,image(s2itomcat:latest)
ericdeMacBook-Pro:minishift ericnie$ oc get bc
NAME TYPE FROM LATEST
nodejs-example Source Git
s2itomcat Source Git@master
修改yaml文件,或者直接在界面上将原有pipeline的jenkinsfile修改成
node('maven') {
stage 'build'
openshiftBuild(buildConfig: 's2itomcat', showBuildLogs: 'true', namespace: 's2i-tomcat')
openshiftBuild(buildConfig: 'nodejs-example', showBuildLogs: 'true', namespace: 's2i-tomcat')
stage 'deploy'
openshiftDeploy(deploymentConfig: 's2itomcat', namespace: 's2i-tomcat')
openshiftDeploy(deploymentConfig: 'nodejs-example', namespace: 's2i-tomcat')
}
同时可以选择Serial或者Parrell的编译部署模式,然后完成部署。
设置了并行,但还是串行跑,应该是jenkins只provision了一个maven pod的原因。
pipeline跨集群运行的例子参考
https://github.com/openshift/jenkins-client-plugin/
OpenShift应用镜像构建(3) - Jenkins的流水线构建的更多相关文章
- 使用Jenkins pipeline流水线构建docker镜像和发布
新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...
- OpenShift应用镜像构建(1) S2I tomcat 镜像定制
参考并感谢https://www.jianshu.com/p/fd3e62263046 在对接项目制作应用镜像的过程中,经常发现避免不了的是需要写Dockerfile,(当然另外一种方式是直接run一 ...
- GitLab集成Jenkins、Harborn构建pipeline流水线任务
一.计划 在jenkins中构建流水线任务时,从GitLab当中拉取代码,通过maven打包,然后构建dokcer镜像,并将镜像推送至harbor当中.Jenkins中含开发.测试.生产视图,开发人员 ...
- 有手就行5——jenkins项目构建类型(pipeline流水线项目构建推荐)
有手就行5--jenkins项目构建类型(pipeline流水线项目构建推荐) Pipeline简介 1) 概念 Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立 ...
- DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...
- 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境
构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...
- 使用Docker构建企业Jenkins CI平台
在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...
- 11.实战交付一套dubbo微服务到k8s集群(4)之使用Jenkins进行持续构建交付dubo服务的提供者
1.登录到jenkins,新建一个项目 2.新建流水线 3.设置保留的天数及份数 4. 添加参数 # 参数 . name: git_repo type: string description: 项目在 ...
- 实战交付一套dubbo微服务到k8s集群(5)之使用Jenkins进行持续构建交付dubo服务的提供者
1.登录到jenkins,新建一个项目 2.新建流水线 3.设置保留的天数及份数 4.添加第一个参数:设置项目的名称 5.添加第二个参数:docker镜像名称 6.添加第三个参数:项目所在的git中央 ...
随机推荐
- jQuery -《锋利的jQuery》————读后小结
jQuery是一个优秀的javascript库. 我用的是vs2012自带的 jquery-1.8.2.js这个库,在Scripts这个文件夹下面 首先,我们使用jQuery要在head标签内引入j ...
- tomcat远程调试参数备忘
tomcat远程调试,启动时添加参数: -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,ser ...
- Oralce Spatial
1.建立数据库连接 create public database link ytlink connect to hightop identified by hightop using '(DESCRI ...
- P2327
code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; backgr ...
- 下载安装go插件包报错fatal: unable to access 'https://github.com/golang/tools.git/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
使用git命令来给vscode安装go插件的时候报错,如下: $ git clone https://github.com/golang/tools.git tools Cloning into 't ...
- Java容器类解析
1:集合 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,默认长度是十 查询快,增删慢 add()时判断是否数组越界,数组扩容为原来的1.5倍 线程 ...
- AndroidManifest.xml文件详解(application)
http://blog.csdn.net/think_soft/article/details/7557101 语法(SYNATX): <application android:allowTas ...
- CodeForces 809D Hitchhiking in the Baltic States(FHQ-Treap)
题意 给你长度为$n$的序列,序列中的每个元素$i$有一个区间限制$[l_i,r_i]$,你从中选出一个子序列,并给它们标号$x_i$,要求满足 $,∀i<j,x_i<x_j$,且$, ∀ ...
- Oracle concat
如果要进行多个字符串的拼接的话,可以使用多个CONCAT()函数嵌套使用,上面的SQL可以如下改写:SELECT CONCAT(CONCAT(CONCAT('工号为',FNumber),'的员工姓名为 ...
- Web应用扫描测试工具Vega
Web应用扫描测试工具Vega Vega是Kali Linux提供的图形化的Web应用扫描和测试平台工具.该工具提供代理和扫描两种模式.在代理模式中,安全人员可以分析Web应用的会话信息.通过工具 ...