Day 7. Jenkins - Gitlab Webhook集成
Gitlab webhook的主要目的就是当gitlab中的项目代码有变更时,例如Push / Merged,就会触发 Jenkins自动构建。
结合DevOps理论,一般会在Code Review后Merge request,一般此时应构建一个版本,用于自动化测试等后续操作。而这个行为在大多数执行DevOps的公司里都是手动执行的,也就是跑到Jenkins中去启动相对应的Pipeline。
而在这里,可以通过Gitlab的Webhook自动启动Jenkins pipeline,更为智能方便。
一、配置Jenkins,安装相关插件
Generic Webhook Trigger Plugin
其实也可以安装Gitlab插件,但是这个gitlab插件不支持获取诸如分支、触发者、行为等触发信息,所以这里选择这个插件。
二、配置Jenkins项目
在
Build Triggers
中找到
Generic WEbhook Trigger
在相关内容中的末尾选中,这两项可以有效的帮助我们debug:
- Print post content 打印触发请求的POST内容
- Print contributed variables 打印绑定的变量内容
配置Token,该token即是访问Jenkins的URL,也是唯一标识本项目的ID,所以,在这里标识的token应该全局唯一的:
配置获取请求参数,这个参数是gitlab webhook访问时通过URL地址带过来的:
如上所示,通过
http://
JENKINS_URL/generic-web
hook-trigger/invoke?runOpts=gitlab
触发Jenkins构建,那么Jenkins Pipeline中就会自动创建一个变量名为
runOpts
的变量,并绑定值为
gitlab
。
这个相当有用,通过这个可以覆盖parameters定义的变量,或者通过某个变量来判断当前是由人手触发还是由gitlab触发,从而可以根据这个的不同而有不同的构建行为。
获取请求内容参数:
gitlab webhook发送到Jenkins的请求是一个json,有时我们需要获取一些请求信息,如分支名、触发者等相关信息,这里即可做到。
搞定这些基本上就配好了Jenkins对于gitlab的webhook配置。
仅接收Push,不接收创建、删除Branch的触发:
参考:
三、配置gitlab项目
跑到项目的配置页面,按下图选择
webhooks
:
在以下页面中填写Jenkins的相关信息:
URL: http(s)://<jenkins url>/generic-webhook-trigger/invoke?<parameters>
Secret token: 在Jenkins 中配置好的secret token
Trigger: 触发事件
如果是HTTP,或者是自签证书HTTPS,那么可以取消
SSL verification
:
保存后可以测试一下:
可以在Jenkins的项目日志中看到相关的调用结果:
四、总结
由此,Jenkins & Gitlab集成基本完成。
文章写得不怎么样,这个过程需要动手自己整一遍才会有所体会。