Generic Webhook Trigger 实现特定提交触发自动构建
Jenkins与Gitlab联动可以通过webhook的方式来完成,gitlab上自带的webhooks
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI2EzX4xSZz91ZsAzNfRHLGZkRGZkRfJ3bs92YsAjMfVmepNHLVVnc1UVdyVjUp9WNy1SW1MTLLZTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxSUhxGatJGbwhFT1Y0Mk9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4gzMkRjZlNGNmdzMhNWN4gjM2QDMwUWMkdDM1EmN1AzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
看似触发方式这么多,能够满足自身需求的却不多。因此需要借助Jenkins的
Generic Webhook Trigger
简称
GWT
插件来对webhook进行扩展。
首先需要在Jenkins中安装
Generic Webhook Trigger
安装完成之后在
构建触发器
选择中就会多出GWT的选项
勾选上GWT的选项之后找到
Token
选项
根据提示可知,这里还是和Jenkins自带的
Build when a chanage is pushed to GitLab
相同的原理,不同点是
GWT
的token没有自动生成功能。其实还有很多高度定制话的东西,这里不讲他太多,后面
jenkinsfile
的时候再来说明,更容易理解。
Pipeline
将Jenkinsfile通过gitlab进行管理是,配置大致如下:
重头Jenkinsfile如下:
参考:https://plugins.jenkins.io/generic-webhook-trigger/
在处理以上业务的时候发现了pipeline还有一个
gitlabCommitStatus
方法可以将构建步骤状态发回到gitlab是的pipeline中。具体参看:https://www.jenkins.io/doc/pipeline/steps/gitlab-plugin/
实现效果如下:
Jenkins中:
GitLab中
而且点击gitlab中的步骤状态还会跳转到Jenkins的
BlueOcean
界面,可以说相当nice!!
实现这一过程中不幸踩中
gitlab-plugin
的坑——状态信息不能发送到gitlab中,
Jenkins日志信息:
被坑2天最后发现是由于:构建步骤中使用了多个gitlab代码仓库,导致
gitlabCommitStatus
无法获取到有效的目标仓库。Jenkins把报错日志见上图👆,下图是pipeline关键代码👇
根据截图可以看出不管你是使用jenkins的
git
插件还是
checkout
都会导致图上的描述的结果,出处:https://github.com/jenkinsci/gitlab-plugin/issues/899
为了满足需求就需要绕开以上获取依赖代码的方式:最后发现使用Jenkins的sshagent插件包裹shell命令可以完美避开以上问题:
参考:
《Jenkins 2.x实践指南》读书笔记
gitlab-plugin多仓库gitlabCommitStatus问题
https://plugins.jenkins.io/generic-webhook-trigger/
Jenkins2-学习系列9----Generic-Webhook-Trigger-插件详讲
https://xie.infoq.cn/article/600f642fcb26f0c280a7acf59