精华内容
下载资源
问答
  • 需求 Jenkins多分支流水线(Multibranch Pipeline )项目类型能够在同一个项目的不同分支上实现不同的Jenkinsfile。在多分支流水线项目中, Jenkins ...但是对于多分支流水线,每次webhook触发的可能是master、develop或

    需求

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

    PS:如果你对博文感兴趣,请关注我的公众号“木讷大叔爱运维”,与你分享运维路上的点滴。

    展开全文
  • gitlab+jenkins 利用webhook自动构建代码

    万次阅读 2017-03-18 19:59:53
    google了下,有很多种方式,这次采用gitlab的webhook来触发jenkins,实现自动构建。版本gitlab-8.2.3 及以上 jenkins 2.9 及以上 系统 centos 6.5步骤1.jenkins安装gitlab-hook-plugin插件 访问https://wiki.jen

    每次代码push后,还要去手动点jenkins构建,感觉这一步挺多余的,想省掉这一步。google了下,有很多种方式,这次采用gitlab的webhook来触发jenkins,实现自动构建。

    版本

    系统 centos 6.5
    gitlab-8.2.3 及以上
    jenkins 2.9 及以上
    jenkins插件:
    gitlab-plugin 1.4.5及以上。这个插件注意下,如果使用的是低版本的,可能会导致后面的配置中看不到 Build when a change 选项

    步骤

    1.jenkins安装gitlab-hook-plugin插件

    访问https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin,下载最新版本,进入到jenkins的系统管理->插件->高级,选择上传插件。点击上传后,jenkins会自动安装,安装完成后,重启下jenkins

    2.配置jenkins


    打开要自动构建的jenkins项目,找到构建触发器,勾选Build when a change is pushed to GitLab. GitLab CI Service,并记录下后面的url地址。

    这里有个选项Accept merge request on success,它的作用是用来筛选分支,比如同一个项目中有多个分支,可能只想自动构建其中的一个,这时就可以通过它匹配,默认是构建所有的分支。

    如果是新版本的jenkins,比如2.138.1,需要对权限进行设置,否则gitlab会收到403错误,无法触发构建。
    第一种方式是开启匿名用户读取的权限:
    点击系统管理->全局安全配置->勾选 匿名用户具有可读权限

    如果jenkins是暴露在公网的话,这种方式不安全,推荐用第二种方法Secret token。
    在jenkins项目的Build when a change is pushed to GitLab.配置中,选择高级,找到Secret token,点击Generate,将生成的token记录下来,之后配置webhook时会用到。

    3.配置gitlab

    进入gitlab项目管理界面,选择webhook,在url中输入刚才在jenkins配置界面复制那一个url,点击ADD WEB HOOK,之后再点击TEST HOOK,如果看到jenkins中有自动出现一个构建事件,即是配置成功了。
    gitlab的版本迭代很快,界面也经常变,不管如何变,都是找到WEB HOOK的设置界面进行设置即可。以下界面仅供参考。

    如果jenkins的项目中配置了Secret token,并且webhook的配置界面中有Secret Token的选项,则可以将刚才生成的token填入Secret Token中,保存配置即可。

    展开全文
  • 持续集成九 gitee webhook 触发构建

    千次阅读 2020-04-24 17:34:07
    项目配置 General 配置之前配置的gitee服务连接 源码管理配置安装官方那样配置 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE 触发器勾选webhook 重要的是要配置webhook密码 ...

    官网插件教程:https://gitee.com/help/articles/4193#article-header11

    官网已经很详细了。

    Jenkins安装插件:

    • git client

    • git

    • gitee

    推荐手动安装

    1.Jenkins 【系统配置】添加gitee服务

    2.项目配置

    General 配置之前配置的gitee服务连接 

    源码管理配置安装官方那样配置

    origin

    +refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE

     

    触发器勾选webhook

    重要的是要配置webhook密码

     

    触发器暂时默认配置,

    3.在gitee配置

    gitee是公网的,所有这里配置的url是需要公网能够访问的。

    个人搭建,可以使用花生壳做代理

     

    然后配置密码

     

    问题:

    经过测试,密码一定要配置,不然就会出现404问题

    展开全文
  • 推送到指定分支触发构建 根据commit的文件,结合mvn -pl指令,实现部分增量构建,并记录commit信息 推送事件也可以换成Tag push events、Merge request events等其他触发条件,根据需要自由选择。 基础实现 使用...

    在上一篇博客中,我们学习了Jenkins的搭建和插件+流水线的基本使用方法,Jenkins极大地提升了部署效率。
    最近想学习一下如何集成GitLab webhook,实现进一步解放双手,目标:

    • 推送(git push)触发构建
    • 推送到指定分支触发构建
    • 根据commit的文件,结合mvn -pl指令,实现部分增量构建,并记录commit信息

    推送事件也可以换成Tag push eventsMerge request events等其他触发条件,根据需要自由选择。

    基础实现

    使用Gitlab Hook Plugin,并在Jenkins和GitLab中分别配置。

    下载并配置插件

    下载安装Gitlab Hook Plugin

    在Jenkins Job中配置

    GitLab中配置

    在Gitlab中配置

    在Jenkins配置中配置允许访问

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OamaMgBQ-1591281001642)(https://upload-images.jianshu.io/upload_images/6810620-9db94d3d3098de57.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    出现如图所示提醒,配置成功!

    至此,目标中的前两条,推送构建和推送到指定分支构建实现!

    进阶实现

    从上述过程,我们也可以看出,WebHook的本质就是从GitLab发了一条请求,Jenkins配置了一个终端地址(endpoint)来接收,从而实现了两个步骤的串联。
    这个请求实质上就是一条HTTP POST请求。
    相信接触过服务互相调用的小伙伴们都不陌生。有了请求体,我们自然可以拿到自己想要的东西,进行进一步的处理了。
    请求体内容

    Jenkins插件:Generic WebHook Trigger Pugin

    下载并配置Generic WebHook Trigger Pugin
    从插件简介来看,支持接收任何一个HTTP请求,当然也包括接收GitLab发送的请求。

    Jenkins Job中配置接收地址

    构建触发器配置

    配置鉴权token

    在Jenkins用户管理中配置鉴权token

    我直接使用admin帐号创建,在发送请求时需要携带此token。

    GitLab配置

    在Gitlab中的配置与上文相同,格式为:
    http://admin:${token}@${JENKINS_IP}:${PORT}/generic-webhook-trigger/invoke
    填上刚刚配置生成的token和自己的Jenkins地址和端口即可。
    同样可以使用自带的测试来测试连接,返回200成功。

    • 如果返回404,看配置的地址是否有误
    • 返回403,查看权限配置是否有误
      至此,连接建立成功!

    编写流水线脚本

    关于如何使用声明式流水线,上一次的博客已有所介绍。这里主要说明如何加入触发器语法。

    流水线触发器语法

    从JSONPath中获取参数
    要从请求体中拿到所需要的参数,可以通过配置获取JSONPath参数实现。

    在流水线中加入下列语句,即可当作变量在流水线脚本中使用。

     triggers {
            GenericTrigger(
                genericVariables: [
                  [key: 'branch', value: '$.ref'],
                  [key:'commitText', value:'$.commits']
                ],
                causeString: 'Triggered on $branch' ,
                printContributedVariables: false,
                printPostContent: false
            )
        }
    
    • 序列化JSON
      要想在pipeline脚本中将字符串反序列化成JSON对象,可以引入 Pipeline Utility Step插件,该插件提供了一些工具方法。
      Pipeline Utility Step
    def commits = readJSON text: commitText
    

    流水线脚本使用Groovy语言,该语言基于Java编写,也集成了一些有趣的特性。在IDEA中编写只需要配置Groovy Library即可。

    核心方法

    • 根据commits,定义patternMap,匹配到指定正则文件格式,构建指定组件。
        def modifiedFile = [];
        for (commit in commits) {
                modifiedFile.addAll(commit.getAt("added").findAll())
                modifiedFile.addAll(commit.getAt("modified").findAll())
                modifiedFile.addAll(commit.getAt("removed").findAll())
            }
    
            def buildComponents = new HashSet();
            def patternMap = ['mark-engine-manager/.*': 'manager', 'mark-tools/.*': 'web','mark-engine-dm/.*':'dm','mark-engine-web/.*':'web',
            'mark-engine-uc/.*':'uc','mark-engine-gateway/.*':'gateway'];
    //遍历所有修改了的文件
            for (file in modifiedFile) {
                for(entry in patternMap.entrySet()){
                    if (file ==~ entry.key) {
                        buildComponents << entry.value;
                    }
                }
            }
    
    • 根据需要构建的组件,拼接maven构建指令。
    String mvnCmd = 'mvn clean install -Dmaven.test.skip=true'
    for(component in buildComponents){
          mvnCmd = mvnCmd + ' -pl mark-engine-'+component+',';
    }                    
    

    经过调试和测试push,三个目标全部完成。

    总结

    一切都是代码,CICD当然也可以使用代码实现。经过实践我们可以探索出Jenkins更多有趣的玩法。

    展开全文
  • Jenkins多分支流水线(Multibranch Pipeline )项目类型能够在同一个项目的不同分支上实现不同的Jenkinsfile。...在实际应用中,我们经常需要Git+Jenkins实现代码提交触发Job的自动构建。对于普通Job,web...
  • 开发同事在提交代码到gitlab后,需要使用jenkins对代码进行构建,每次都需要手动操作会很繁琐,如果工程很大,那么也会浪费时间,gitlab的webhook功能,可以在代码提交后自动调用jenkins进行指定的项目构建 ...
  • webhook实现按分支变更自动构建 以gitlab为例,利用webhook实现了按照分支变更自动构建webhook是一种web回调或者http的push api。有时候我们也将Webbhook称为反向API。 Jenkins的插件安装 想要完成Gitlab的变更...
  • 在上面的源码配置中Branches to Build中只配置了master和test分支,表示gitlab webhook只能触发master和test构建。   4. 配置gitlab webhook url 在gitlab中打开前面创建好的example-springbootmvc ...
  • Jenkins 多分支构建

    万次阅读 2018-08-10 15:20:43
    今天终于搞定了 Jenkins 的多分支构建的配置。 以前在使用 gitlab-ci 时,可以根据不同的分支执行不同的构建,比如 release 分支执行发布到 fir 上的构建,其他分支只执行编译。但因为服务器上的 4G 内存还要跑其他...
  • 项目组已实现通过Jenkins进行构建,最近构建...考虑到Gogs 的webhook可以检测push事件后进行处理,我们决定把整个构建做成自动化,实现开发推送代码到仓库后,自动触发Jenkins构建。一、Jenkins安装Generic Webho...
  • GitLab,svn,Bitbucket 都支持通过webhook方式触发jenkins构建。Jenkins甚至可以直接生成一个URL,使用curl命令访问URL即可触发。 今天介绍一下Bitbucket触发Jenkins构建和curl命令触发构建的方法。 使用curl命令...
  • 自动触发jenkins,我们希望是根据自己需要的分支构建才自动触发,有选择性构建,而不是全部构建,故有以下插件处理,Generic Webhook Trigger ,可以根据条件做过滤处理。 其实整体思路和github webhook差不多 ...
  • 某大佬让我实现gitlab的webhook,监听到其它分支合并到mater分支后给DY发邮件。我做过用 push 到 github触发jenkins实现自动部署,但是那个时候就是自己玩,不用考虑分支和其它。其实一旦扯到分支上,其实我个人...
  • gitlab webhook触发jenkins自动化构建

    千次阅读 多人点赞 2019-06-05 16:39:53
    jenkins安装gitlab hook插件,进入...在配置里选择构建触发器,选择将更改推送到gitlab时构建,这个URL就是在gitlab webhook设置里填写的URL,记得ip端口或者域名要改成jenkins的真正地址。 点开高级设置,选择...
  • 构建触发器(webhook),有的人称为钩子,实际上是一个 HTTP 回调,其用于在开发人 员向 gitlab 提交代码后能够触发 jenkins 自动执行代码构建操作。 以下为新建一个开发分支,只有在开发人员向开发(develop)分支提交...
  • 用于设置当提交到master分支的时候触发编译,并生成Secret token 用于gitlab使用 设置gitlab提交触发远程jenkins编译 打开gitlab工程地址,设置中找到如下对应的项,根据需求填写 保存远程webhook,可保存多个地址 ...
  • 提交代码push时发请求给jenkins,jenkins监听到后请求后就触发构建事件,其实目前只要push就构建,还不是特别友好,接下来我还会介绍另一种方式,可以区分分支,那么我开发dev不需要构建,只需要构建master即可。...
  • 2、Gitlab project 页面setting选择Integrations,配置webhook(将红框“1”中内容填入红框“2”中) 3、配置分支过滤,点击(“高级”)   4、测试配置 5、配置成功(如果做了分支过滤,这里不...
  • 文章目录Jenkins Multi-branch Pipeline前言典型场景前置条件在GitHub上生成Personal Access Token在Jenkins中配置GitHub Personal Access ...Jenkins Pipeline适合对一个分支进行构建,并部署到一个环境中。 如果相
  • 今天自己看着插件文档摸索了一下,实现了git push后Webhook自动触发Jenkins进行代码构建,可通用gitlab、github等平台,中文关于这方面自动部署的文档比较少,所以把我的学习过程记录下来,让其他人少走点弯路。...
  • 1.开发在哪个分支上提交代码,jenkins就自动发布相对应的分支。 2.实现既能手动发布jenkins,也要实现自动webhook发布 约定: 和开发约定分支对应的环境,比如 debug对应开发环境,develop对应测试环境,master对应...
  • 码云Webhook触发Jenkins自动构建  http://blog.51cto.com/tseyuzen/1960905 实战环境:码云(git.oschina.net)、Jenkins(可在公网访问)、插件Generic Webhook Trigger -- Jenkins安装Generic Webhook Trigger...
  • 2、参数化配置,手动构建选择分支 3、配置git地址,并且使用参数变量名 4、构建触发器(重点) 中间的内容保持默认就行 后面的配置就根据grade项目或者maven项目或者前端项目选择构建环境,会单独说明...
  • 选择类型为git,填写好git项目地址,填写拉取分支名字 生成流水线脚本,脚本里就包含了凭证信息 填写到流水线中后,点击保存—构建—就看到了拉取的日志 b)生成一个构建stage 选择sh:shell script 输入mvc clean...
  • 当 CircleCI 构建完成时,它会根据所构建分支查找任何打开的拉取请求,并向每个人发布一个状态,通知 PR 作者他们的目标分支是红色还是绿色。 当拉取请求被打开或推送到时,这会向 CircleCI 询问 PR 基础分支的...
  • 一、先做好jenkins和gitlab的webhook自动构建 二、选择哪个分支(我这是test分支) 三、选择build Triggers 四、过滤test分支 五、保存即可 转载于:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,636
精华内容 654
关键字:

webhook分支构建