当前位置:首页 > 技术分析 > 正文内容

Jenkins多分支流水线:Webhook按分支触发自动构建

ruisui884个月前 (02-03)技术分析19


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. 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


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)Expression:通过正则表达式匹配不同分支,此项目有两个分支,即:

refs/heads/master
refs/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


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

(2)BlueOcean查看



总结

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

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1262.html

分享给朋友:

“Jenkins多分支流水线:Webhook按分支触发自动构建” 的相关文章

Beta版Linux Mint“Xia”发行版22.1发布

IT之家 12 月 13 日消息,Beta 版 Linux Mint“Xia” 22.1 昨日(12 月 12 日)发布,新版本基于 Ubuntu 24.04,内核版本为 Linux 6.8,长期支持将持续到 2029 年,为用户提供可靠稳定的使用体验。新版本在软件包管理方面,主要弃用了传统的 ap...

GitLab 14.6发布,优化Geo高可用,安全更新等

昨天,GitLab官方按照管理发布了有一个月度版本GitLab 14.6的发布,这也是本年度收官版本。14.6中在安全合规性方面,在Geo方面以及MD代码块一键复制等方便做了优化,另外还在UI图标方面发布了一套全新的图标。详细情况请和虫虫一起学习。GitLab 14.6主要改进使用 Geo 实现无缝...

抖音 Android 性能优化系列:启动优化实践

启动性能是 APP 使用体验的门面,启动过程耗时较长很可能使用户削减使用 APP 的兴趣,抖音通过对启动性能做劣化实验也验证了其对于业务指标有显著影响。抖音有数亿的日活,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向...

vue v-html动态生成的html怎么加样式/事件

1、动态生成的html,样式不生效//html 布局 <view v-html="html"> {{html}} </view> //动态生成的元素 <view class="btngo" @tap="handleLink...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing 发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。早在2021年,腾讯的 TDesing 刚发布不久,我就写了一篇简短的文章来介绍,当时主要关注的是 TDesign 的 Vue 组件库和用来搭建 admin 后台系统的实用性。虽然当时看起来不错,但还处于测试版,...