jenkins把pipeline从源码剥离,单独git仓库管理

Jenkins-Pipeline实践浅谈 - 知乎

Pipeline 实践:将 Jenkinsfile 与项目分离 - 简书

Jenkinsfile之伤

在Pipeline中至关重要的就是Jenkinsfile,类似Dockerfile,包含了Job所有需要执行的步骤,根据Pipeline的使用规则,我们常常需要把Jenkinsfile文件放到对应工程代码的根目录,Jenkins在获取工程代码后会解析Jenkinsfile,然后根据代码顺序执行下去,达到持续集成的效果。

但是这种模式有一个致命的缺点:

所有的Jenkinsfile分散到不同的工程中,对于后期的维护和功能扩展成本会非常高

实际操作:  参考: https://github.com/jenkinsci/pipeline-multibranch-defaults-plugin

1 先在Jenkins的Managed Jenkins的 Managed files 下添加默认的pipeline:

Id:   default-jenkinsfile

​
#!/usr/bin/env groovy
import groovy.transform.Field

@Field def job_name=""

node()
{
   // 获取当前job名称。也可以按需自定义
   job_name="${env.JOB_NAME}".replace('%2F', '/').split('/')
   job_name_to_list = job_name[0].split('-')
   project = job_name_to_list[0]
   service =  ""
   for(int i=1;i<job_name_to_list.size();i++){
      if(i==job_name_to_list.size()-1){
         service = service.concat(job_name_to_list[i])
      }else{
         service= service.concat(job_name_to_list[i]).concat("-")
      }
   }
    println("job_name is: $env.JOB_NAME")
    println("project is: $project")
    println("service is: $service")
    // 自定义workspace
    workspace="/home/.jenkins/workspace/${project}-${service}_${env.BRANCH_NAME}"

    ws("$workspace")
    {
        dir("cicd")
        {   
            // clone Jenkinsfile项目
            git credentialsId: 'gitee_account', url: 'https://gitee.com/cmlfxz/cicd.git'

            // 根据job name、构建分支,自动加载对应的Jenkinsfile
            def check_groovy_file = ""
            if (env.BRANCH_NAME == 'develop') {
                check_groovy_file="${project}/${service}/test/Jenkinsfile"
            }else if (env.BRANCH_NAME == 'master'){
                check_groovy_file="${project}/${service}/prod/Jenkinsfile"
            }
            load "${check_groovy_file}"
        }
    }
}

​

这段代码不能照抄,必须根据自己的job name和工程目录进行修改,而且必须反复测试,很繁琐,没招,每次修改还得approve一下.

我的jenkins Job name如下图是以项目名-服务名命名的  default-jenkinsfile的前面那段就是提取项目名和服务名出来,然后下载公共的git文件到每个job的cicd目录下,然后根据分支名调用不用项目和服务的不同分之下的jenkinsfile

其中dir("cicd")是把jenkins的独立git文件下载到每个job中的cicd目录下,  每个job一份,如果是各个job共享一个目录会有问题,啥问题没记下来.

2  新建Multibranch pipeline job,job名称保持和步骤1中的"项目名称"一致。 Build Configuration 中选择by default Jenkinsfile,输入步骤1中的script ID。

我的git独立仓库的目录结构:

https://gitee.com/cmlfxz/cicd

 

vars下面就封装了拉代码,钉钉通知和sonar的函数 src目录实践中没用到

yaml文件我目前是用helm组织的,最早使用kustomize, 同时使用了小技巧解决helm install  upgrade出现各种资源冲突问题,可以看

helm的骚操作,一般人我不告诉他

如果你有别的处理办法,欢迎留言告知.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_36013896

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值