让Webhooks串联GitLab、Jenkins、企业微信

1,291 阅读3分钟

给公司内部写的类似antd的业务组件库每次发布时都要手动去jenkins构建下,太懒了,不想登录jenkins,还想让组员都能第一时间知晓,于是搬来了Webhooks,实现了本地代码推送远程仓库后,jenkins自动构建,构建完成后消息自动推送到企业微信,其他人可以点击消息跳转发布的站点。

企业微信

要推送到企业微信,需添加群组机器人,在企业微信群中直接添加,如果没有,确认自己是否有权限。

image.png

添加完成后就能看到Webhook的地址,保存好这个Webhook的地址,下面要用到;点击这个地址还可以详细看到机器人的其他信息,推送消息示例、配置说明等。

image.png

image.png

Webhooks (网络钩子)

关于Webhooks是什么,看这里👉,我们用的是GitLab,因此以GitLab配置为例,直接看图:

image.png

Webhooks中的关键配置:
URL: 即请求的url,这里的URL填写的是Jenkins中的Webhooks的Url;
Trigger: 触发请求的事件/动作,Trigger里的诸多配置也是一看就能懂,我只配置了Push EventsMerge Request Events,Push Events中也没有写分支名称就意思是所有分支。 Secret token: 相当于密钥,可以自己填写固定值,或者自动生成。如果是自己填写,则生成的url后面参数是token=填写的值,如果是自动生成的,url后面参数是key=自动生成的值;不论怎样生成,这个值在后面Jenkins配置中会用到。

image.png

image.png

最下面有Test按钮可以点击测试Webhooks,Recent events就能显示最近发送的请求的列表,View details里可以看到发送的请求的详细参数、请求头及响应结果等;

Jenkins配置

Jenkins中需要安装相关企业微信的插件,我用的是QY Wechat Notification Plugin(有点小瑕疵),如果是钉钉,插件有DingTalk, 或者在Jenkins Plugins中自己搜索;另外一个插件是Generic Webhook Trigger,相当于处理其他客户端的请求触发Jenkins的构建。

构建触发器——Generic Webhook Trigger配置

image.png

Post content parameters中配置的就是参数,我用三个参数$ref,$project.git_ssh_urltoken来确定是哪个仓库代码来触发jenkins,其实就是对应的Gitlab仓库触发对应的jenkins项目构建;如果想用其他参数,回到GitLab测试Webhooks时的View details按钮,点进去仔细看。

image.png

image.png

QY Wechat Notification Plugin配置

image.png

安装完插件后,在Jenkins的项目中进行配置,增加构建后的步骤中会多一项: 企业微信通知

image.png

点击后,需要进行配置 image.png 因为是内网环境就没有填写UserId和手机号(也没实际试过),更多消息中这个插件只支持markdown格式,而企业微信机器人默认支持文本(text)、markdown(markdown)、图片(image)、图文(news)四种消息类型。

总结一下大概流程: 本地提交代码,推送Git仓库,Webhooks配置了Url,向Jenkins发送请求,Jenkins根据请求携带的参数触发对应项目的构建,待构建完成后, 向企业微信推送消息。
这里面要配两次Webhooks的地址,注意别配错了。不同的软件版本和插件可能配置会有差异。

最后看一下推送后的消息

image.png