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中央 ...
随机推荐
- 部署HBase系统(分布式部署)
1.简介 HBase系统主要依赖于zookeeper和hdfs系统,所以部署HBase需要先去部署zookeeper和hadoop 2.部署开始 IP或者HOSTNAME需要根据自身主机信息设定. 部 ...
- MiCode108 猜数字
Description 相传,十八世纪的数学家喜欢玩一种猜数字的小游戏,规则如下: 首先裁判选定一个正整数数字 N (2 \leq N \leq 200)N(2≤N≤200),然后选择两个不同的整数X ...
- Elasticsearch源码分析(一)启动流程 ModuleBuilder injector
http://blog.csdn.net/u010994304/article/details/50452890 es启动脚本是bin目录下的elasticsearch. 脚本内容不再赘述,java主 ...
- Qt笔记——数据库的图形界面
1将读取的数据通过表格的方式显示出来 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QSqlTable ...
- 走进 Cake for .NET
一.什么是 Cake Cake(C# Make) 是一个使用 C# DSL 面向 Task 的跨平台构建自动化系统,像编译代码,复制文件和文件夹,运行单元测试,压缩文件和构建 NuGet 包. 更多 ...
- 是时候升级你的Js工具了-分页【基于JQ】
好久没有来逛园子,也好久没有更新博客,就像沉睡已久的人忽然被叫醒,忽然就被园友的回复惊醒了.园友提出了关于我之前一篇文章的疑问——可那已经是半年以前的博客了,加上我一直觉得分享给大家的应该是我最新的思 ...
- php-cgi segmentation fault nginx
谷歌.百度了一堆后,无果. yum安装软件也报segmentation fault 果断重装系统吧
- vs2005 QT4.7.1编译 详细
http://blog.csdn.net/debugconsole/article/details/8230683 网上一搜有QT+2005编译的很多文章,但是都不详细,很多都编不过,特别的在conf ...
- 循序渐进PYTHON3(十三) --6-- COOKIE和SESSION
1. 由于HTTP协议是无状态的协议(发送一次请求即断开),所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session. 典型的场景比如购物车,当 ...
- changing chmod for files but not directories
find . -type f -print0 | xargs -0 chmod 644