天天看点

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

Generic Webhook Trigger 实现特定提交触发自动构建

Jenkins与Gitlab联动可以通过webhook的方式来完成,gitlab上自带的webhooks

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

看似触发方式这么多,能够满足自身需求的却不多。因此需要借助Jenkins的

Generic Webhook Trigger

简称

GWT

插件来对webhook进行扩展。

首先需要在Jenkins中安装

Generic Webhook Trigger

安装完成之后在

构建触发器

选择中就会多出GWT的选项

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

勾选上GWT的选项之后找到

Token

选项

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

根据提示可知,这里还是和Jenkins自带的

Build when a chanage is pushed to GitLab

相同的原理,不同点是

GWT

的token没有自动生成功能。其实还有很多高度定制话的东西,这里不讲他太多,后面

jenkinsfile

的时候再来说明,更容易理解。

Pipeline

将Jenkinsfile通过gitlab进行管理是,配置大致如下:

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

重头Jenkinsfile如下:

参考:https://plugins.jenkins.io/generic-webhook-trigger/

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

在处理以上业务的时候发现了pipeline还有一个

gitlabCommitStatus

方法可以将构建步骤状态发回到gitlab是的pipeline中。具体参看:https://www.jenkins.io/doc/pipeline/steps/gitlab-plugin/

实现效果如下:

Jenkins中:

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

GitLab中

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

而且点击gitlab中的步骤状态还会跳转到Jenkins的

BlueOcean

界面,可以说相当nice!!

实现这一过程中不幸踩中

gitlab-plugin

的坑——状态信息不能发送到gitlab中,

Jenkins日志信息:

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

被坑2天最后发现是由于:构建步骤中使用了多个gitlab代码仓库,导致

gitlabCommitStatus

无法获取到有效的目标仓库。Jenkins把报错日志见上图👆,下图是pipeline关键代码👇

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

根据截图可以看出不管你是使用jenkins的

git

插件还是

checkout

都会导致图上的描述的结果,出处:https://github.com/jenkinsci/gitlab-plugin/issues/899

为了满足需求就需要绕开以上获取依赖代码的方式:最后发现使用Jenkins的sshagent插件包裹shell命令可以完美避开以上问题:

Generic Webhook Trigger 实现特定提交触发自动构建Generic Webhook Trigger 实现特定提交触发自动构建

参考:

《Jenkins 2.x实践指南》读书笔记

gitlab-plugin多仓库gitlabCommitStatus问题

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

Jenkins2-学习系列9----Generic-Webhook-Trigger-插件详讲

https://xie.infoq.cn/article/600f642fcb26f0c280a7acf59