,," /> " />

目 录CONTENT

文章目录

Jenkins:多分支流水线

Administrator
2024-02-28 / 0 评论 / 0 点赞 / 14 阅读 / 6016 字

简介

Jenkins多分支流水线(Multibranch Pipeline )项目类型能够在同一个项目的不同分支上实现不同的Jenkinsfile。在多分支流水线项目中, Jenkins 自动的发现、管理和执行在源代码控制中包含Jenkinsfile的分支的流水线,这消除了手动创建和管理流水线的需要。

在实际应用中,我们经常需要Git+Jenkins实现代码提交触发Job的自动构建。对于普通Job,webhook自动触发即可;但是对于多分支流水线,每次webhook触发的可能是master、develop或更多分支的构建,这显然是不符合要求的,将会产生很多垃圾的构建历史,给后期查看构建历史排错带来极大的不便。

因此,我们需要的是webhook按分支触发,例如我们的应用场景:

 1. Git版本库有master/develop两个分支,分别对应生产和开发环境;

 2. develop分支代码提交触发自动构建,master分支手动构建;

自动构建只针对develop分支,这样按分支构建,将会避免master或其他分支产生垃圾构建。

注意:本文只介绍通过generic webhook trigger触发部分,至于git版本库端的webhook请根据实际情况自行配置。

自动构建流程

  1. generic webhook trigger 插件实现Jenkins 触发器;

  2. 通过插件的正则匹配,基于refs/heads/develop、refs/heads/master进行判断;

(1)若develop分支提交代码,则变量ref=refs/heads/develop,匹配refs/heads/develop,触发构建;

(2)若master分支提交代码,则变量ref=refs/heads/master,不匹配refs/heads/develop,不触发构建;

3.在develop分支中根据Jenkinsfile进入不同的stage构建;

由于触发的是develop分支,则when条件匹配develop分支,develop分支构建;而master分支构建跳过。

关于正则匹配及多分支流水线,请参考以下链接:

1. www.jenkins.io/zh/doc/book… 

2. plugins.jenkins.io/generic-web… 

3. [github.com/jenkinsci/g…](https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Fjenkinsci%2Fgeneric-webhook-trigger-plugin%2Ftree%2Fmaster%2Fsrc%2Ftest%2Fresources%2Forg%2Fjenkinsci%2Fplugins%2Fgwt%2Fbdd "

2.以test命名job

3.配置job

4.Jenkinsfile

git每个分支必须有相同Jenkinsfile文件,否则“Discovery Branches”检测不到分支。

pipeline {
    agent any
  options {
        ansiColor('xterm')
        timestamps()
    }
    triggers {
        GenericTrigger (
            causeString: 'Triggered by develop', 
            genericVariables: [[key: 'ref', value: '$.ref']], 
            printContributedVariables: true, 
            printPostContent: true, 
            regexpFilterExpression: 'refs/heads/' + BRANCH_NAME, 
            regexpFilterText: 'refs/heads/develop', 
            token: 'VXnNT5X/GH8Rs'
        )
    } 
    stages {
      stage("测试部署") {
            when {
                branch 'develop'
            }
          steps {
                echo 'develop branch'
          }
      }
      stage("生产部署") {
            when {
                branch 'master'
            }
          steps {
                echo 'master branch'
          }
      }
    }
    post {
        unstable {
            emailext (
                body: """项目名称:${JOB_NAME}\n构建编号:${BUILD_NUMBER}\n构建日志:${BUILD_URL}console""",
                subject: '【Jenkins构建通知】:$JOB_NAME - Build # $BUILD_NUMBER - Unstable!',
                to: 'admin@test.cn',
                from: 'test@test.cn'
            )   
        }   
        success {
            emailext (
                body: """项目名称:${JOB_NAME}\n构建编号:${BUILD_NUMBER}\n构建日志:${BUILD_URL}console""",
                subject: '【Jenkins构建通知】:$JOB_NAME - Build # $BUILD_NUMBER - Successful!',
                to: 'admin@test.cn',
                from: 'test@test.cn'
            )   
        }   
        failure {
            emailext (
                body: """项目名称:${JOB_NAME}\n构建编号:${BUILD_NUMBER}\n构建日志:${BUILD_URL}console""",
                subject: '【Jenkins构建通知】:$JOB_NAME - Build # $BUILD_NUMBER - Failure!',
                to: 'admin@test.cn',
                from: 'test@test.cn'
            )   
        }   
    } 
}

其中:**triggers部分就是本次多分支流水线的关键所在

Generic Webhook Trigger 插件

Jenkinsfile中的triggers部分,是Generic Webhook Trigger 插件的具体配置,可以通过Declarative Directive Generator(即声明式指令生成器)图形化生成上面的代码,如下:

1.token配置

token:通过http://JENKINS_URL/generic-webhook-trigger/invoke?token=VXnNT5X/GH8Rs可以触发job。

2.配置过滤

方式1:在Jenkinsfile配置过滤,通过regexp*参数进行过滤处理

regexpFilterExpression: 'refs/heads/' + BRANCH_NAME, 
regexpFilterText: 'refs/heads/develop',

方法2:如下图,手动配置

3.webhook触发构建

需要在代码托管服务,配置jenkins该流水线的webhook地址,并声明触发条件即可

流水线总览

具体流水线编辑Jenkinsfile,见jenkinsfile文档

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区