测试管理Openshift:可靠的Kubernetes发行版devops:改变思维,让一切更加高效

Openshift Jenkins共享并支持pipeline

2019-04-16  本文已影响110人  潘晓华Michael
Openshift Jenkins

诉求

  1. 使用Openshift的pipeline构建流水线,在Openshift上统一管理
  2. 使用一个公共的Jenkins,而不需要每个Project下都创建一个新的jenkins。以节约资源
  3. 在创建新的项目时,尽量少地改动完成以上的需求

问题

openshift默认的BuildConfig如果设置为jenkinsPipelineStrategy策略,将会在当前project下查找jenkins服务,如果没有的话,将会使用master-config中设置的默认jenkins模板所在位置在当前project下创建一个新的jenkins应用,便使用该应用执行相关的pipeline。
每个项目都会创建一个新的jenkins。

解决思路

解决方法

  1. 部署Jenkins作为公共的Jenkins,例如部署在jenkins project下
  2. 创建Project新建模板
$ oc adm create-bootstrap-project-template --name=bootstrap-project-template -o yaml > project-template.yaml

在以上导出的配置中添加默认的jenkins Service/Route/RoleBinding

- apiVersion: v1
  kind: Service
  metadata:
    name: jenkins
    namespace: ${PROJECT_NAME}
  selector: {}
  spec:
    externalName: jenkins.jenkins.svc.cluster.local
    type: ExternalName
- apiVersion: route.openshift.io/v1
  kind: Route
  metadata:
    name: jenkins
    namespace: ${PROJECT_NAME}
  spec:
    host: jenkins-jenkins.apps.it.mbcloud.com
    to:
      kind: Service
      name: jenkins
- apiVersion: authorization.openshift.io/v1
  kind: RoleBinding
  metadata:
    name: edit
    namespace: ${PROJECT_NAME}
  roleRef:
    name: edit
  subjects:
  - kind: ServiceAccount
    name: jenkins
    namespace: jenkins
  userNames:
  - system:serviceaccount:jenkins:jenkins

结果展示:

  1. 将Openshift的Master中添加以下设置
    • 设置Project默认模板为default/bootstrap-project-template
    • 关闭JenkinsPipeline默认在project下创建的机制
...

projectConfig:
 defaultNodeSelector: node-role.kubernetes.io/compute=true
 projectRequestMessage: ''
 projectRequestTemplate: 'default/bootstrap-project-template'

...

jenkinsPipelineConfig:
 autoProvisionEnabled: false
 templateNamespace: openshift
 templateName: jenkins-ephemeral
 serviceName: jenkins
  1. 在Jenkins中的系统管理->系统设置中的OpenShift Jenkins Sync中的Namespace中添加${PROJECT_NAME},之间是以空格分隔的.
    添加project名.png

结果展示:
在Testx中创建一个简单的PipelineConfigBuild进行测试

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: test-pipelinex
  namespace: testx
spec:
  strategy:
    jenkinsPipelineStrategy:
      jenkinsfile: |-
        pipeline {
          agent any
          stages {
            stage("测试"){
              steps {
                echo "打印一下"
              }
            }
          }
        }
    type: JenkinsPipeline

在Testx项目下创建以上的BuildConfig,前提是testx项目名已在jenkins中的系统设置中的OpenShift Jenkins Sync中添加
Testx项目下的PipelineJenkins可以使用Jenkins项目下的Jenkins服务来执行Pipeline

Testx项目下可以使用Jenkins项目下的Jenkins服务来执行Pipeline

参考文章

DevOps的核心内功心法:OpenShift中实现共享Jenkins

上一篇下一篇

猜你喜欢

热点阅读