jenkins插件调用job_Jenkins多分支流水线:Webhook按分支触发自动构建

本文介绍了如何使用Jenkins的多分支流水线配合Generic Webhook Trigger插件,实现按Git分支(如master, develop)触发自动构建。详细讲述了自动构建流程、多分支流水线创建步骤,以及插件配置,强调了正则匹配在分支判断中的作用,以避免不必要的垃圾构建。" 133393150,19974238,Spring MVC框架中的适配器模式详解,"['Spring', '后端开发', 'MVC框架', '设计模式', '适配器']
摘要由CSDN通过智能技术生成
070244b9b80f0b6415daeba9e3703047.png

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请根据实际情况自行配置。

自动构建流程

4aa4f156b0994281c352ea5269012b74.png

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. https://www.jenkins.io/zh/doc/book/pipeline/multibranch/

2. https://plugins.jenkins.io/generic-webhook-trigger/

3. https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd

多分支流水线创建

1.点击Jenkins主页上的 New Item

952e9fc3e64f11ab9825b42b8d5e98f4.png

2.以test命名job

bce4f82ff817393316dd2ee8e5e023e4.png

3.配置job

6c199038cf7f859a0c4ecdea04f28144.png

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}构建编号:${BUILD_NUMBER}构建日志:${BUILD_URL}console""",                subject: '【Jenkins构建通知】:$JOB_NAME - Build # $BUILD_NUMBER - Unstable!',                to: 'admin@test.cn',                from: 'test@test.cn'            )           }           success {            emailext (                body: """项目名称:${JOB_NAME}构建编号:${BUILD_NUMBER}构建日志:${BUILD_URL}console""",                subject: '【Jenkins构建通知】:$JOB_NAME - Build # $BUILD_NUMBER - Successful!',                to: 'admin@test.cn',                from: 'test@test.cn'            )           }           failure {            emailext (                body: """项目名称:${JOB_NAME}构建编号:${BUILD_NUMBER}构建日志:${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.过滤配置

d973558e506cf501ffd4fb02a7396bfc.png

其中:

(1)Expression:通过正则表达式匹配不同分支,此项目有两个分支,即:

refs/heads/masterrefs/heads/develop

而'refs/heads' + BRANCH_NAME 中的BRANCH_NAME是通过环境变量获取构建过程中的当前分支。

(2)Text:匹配的结果,即如果通过正则匹配的结果为refs/heads/develop,则触发构建;否则不会触发构建。

3.webhook触发构建

(1)浏览器中通过webhook手动触发构建:

http://x.x.x.x/generic-webhook-trigger/invoke?token=VXnNT5X/GH8Rs
2dc26f62fecb1dc4d9478bd51834622b.png

通过上图可看出develop分支触发了自动构建,而master分支则没有触发。

(2)BlueOcean查看

461e9f3c2445b031b6013dc9f7b92b12.png
de63ea0d963e3ce1409bf47a3fae7056.png

总结

Webhook按分支触发自动构建使多分支流水线更加灵活化,在便于运维集中管理每个项目的分支同时,有效避免了多分支同时构建产生过多的垃圾构建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值