Openshift-Jenkins共享并支持pipeline

诉求
- 使用Openshift的pipeline构建流水线,在Openshift上统一管理
- 使用一个公共的Jenkins,而不需要每个Project下都创建一个新的jenkins。以节约资源
- 在创建新的项目时,尽量少地改动完成以上的需求
问题
openshift默认的BuildConfig如果设置为jenkinsPipelineStrategy策略,将会在当前project下查找jenkins服务,如果没有的话,将会使用master-config中设置的默认jenkins模板所在位置在当前project下创建一个新的jenkins应用,便使用该应用执行相关的pipeline。
每个项目都会创建一个新的jenkins。
解决思路
- 禁用Openshfit默认的JenkinsPipeline机制,不在当前项目下面自动创建Jenkins
- 在创建一个新的project时,创建名为jenkins的service,同时将它指向公共的Jenkins服务。
- 同时为了在当前Project界面下能够跳转到jenkins的界面,再创建一个jenkins Route,支持跳转到jenkins进行查看运行日志与过程
- 项目要被jenkins控制,需要让公共jenkins具有操作当前项目的权限,所以还需要创建system:serviceaccount:jenkins:jenkins编辑当前Project的权限
解决方法
- 部署Jenkins作为公共的Jenkins,例如部署在jenkins project下
- 创建Project新建模板
1 | oc adm create-bootstrap-project-template --name=bootstrap-project-template -o yaml > project-template.yaml |
在以上导出的配置中添加默认的jenkins Service/Route/RoleBinding
1 | - apiVersion: v1 |
结果展示:
- 将Openshift的Master中添加以下设置
- 设置Project默认模板为
default/bootstrap-project-template - 关闭JenkinsPipeline默认在project下创建的机制
- 设置Project默认模板为
1 | ... |
- 在Jenkins中的系统管理->系统设置中的
OpenShift Jenkins Sync中的Namespace中添加${PROJECT_NAME},之间是以空格分隔的.
结果展示:
在Testx中创建一个简单的PipelineConfigBuild进行测试
1 | apiVersion: build.openshift.io/v1 |
在Testx项目下创建以上的BuildConfig,前提是testx项目名已在jenkins中的系统设置中的OpenShift Jenkins Sync中添加
Testx项目下的PipelineJenkins可以使用Jenkins项目下的Jenkins服务来执行Pipeline
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Michael Blog!


