2017年3月13日星期一

OpenShift_061:使用 Jenkins Pipeline 构建跨 Project 应用

环境:OCP 3.4

上一个例子是在一个 Project 中使用 Jenkins Pipeline 构建应用,但实际使用中的场景是使用 Jenkins Pipeline 构建跨 Project (开发,测试,生产)应用。
本文以 applications,development 和 testing 3 个 project 为例来说明。
其中,applications project 中运行 jenkins pod;development project 中运行应用开发 pod; testing project 中运行应用测试 pod。

1. 下载 Jenkins 镜像 (在 MAC 机器上操作)
同上一篇文章。

2. 加载 Jenkins 镜像 (在 Registry 机器上操作)
同上一篇文章。

3. 在 applications project 中创建 pipeline
从 .yml 脚本创建 pipeline
参考上一篇文章,替换 myfirstpipeline 为 mysecondpipeline。
成功生成之后,再把 pipeline 内容修改为如下内容

node('maven') {
stage 'buildInDevelopment'
openshiftBuild(namespace: 'development', buildConfig: 'myapp', showBuildLogs: 'true')
stage 'deployInDevelopment'
openshiftDeploy(namespace: 'development', deploymentConfig: 'myapp')
openshiftScale(namespace: 'development', deploymentConfig: 'myapp',replicaCount: '2')
stage 'deployInTesting'
openshiftTag(namespace: 'development', sourceStream: 'myapp',  sourceTag: 'latest', destinationStream: 'myapp', destinationTag: 'promoteToQA')
openshiftDeploy(namespace: 'testing', deploymentConfig: 'myapp', )
openshiftScale(namespace: 'testing', deploymentConfig: 'myapp',replicaCount: '3')
}

4.  创建 development project
(1)oc new-project development
(2)oc policy add-role-to-user edit system:serviceaccount:applications:jenkins -n development
允许 jenkins sa 有修改 development project 的权限
(3)创建 myapp 应用,但是去掉自动 build 和 自动 deploy (在 Console 上操作)
参考上一篇文章,myphp 改为 myapp,其余内容一样

 5. 创建 testing project
(1)oc new-project testing
(2)oc policy add-role-to-user edit system:serviceaccount:applications:jenkins -n testing
允许 jenkins sa 有修改 testing project 的权限
(3)oc policy add-role-to-group system:image-puller system:serviceaccounts:testing -n development
允许 testing project 可以从 development project 拉镜像
(4)oc create deploymentconfig myapp --image=172.30.98.122:5000/development/myapp:promoteToQA
创建一个 dc,指向 development project 生成的应用镜像
(5)oc expose dc myapp --port=8080
(6)oc expose svc myapp

6. 在 applications project 中,点击 mysecondpipeline,点击 Start Pipeline


7. 修改 testing project 中的 myapp dc
把 imagePullPolicy:从 IfNotPresent 改为 Always,这样防止从缓存读镜像。

参考文献:
 1. https://blog.openshift.com/cicd-with-openshift/
 2. https://github.com/VeerMuchandi/pipeline-example
 3. https://github.com/OpenShiftDemos/openshift-cd-demo

没有评论: