给公司内部写的类似antd的业务组件库每次发布时都要手动去jenkins构建下,太懒了,不想登录jenkins,还想让组员都能第一时间知晓,于是搬来了Webhooks,实现了本地代码推送远程仓库后,jenkins自动构建,构建完成后消息自动推送到企业微信,其他人可以点击消息跳转发布的站点。
企业微信
要推送到企业微信,需添加群组机器人,在企业微信群中直接添加,如果没有,确认自己是否有权限。
添加完成后就能看到Webhook的地址,保存好这个Webhook的地址,下面要用到;点击这个地址还可以详细看到机器人的其他信息,推送消息示例、配置说明等。
Webhooks (网络钩子)
关于Webhooks是什么,看这里👉,我们用的是GitLab,因此以GitLab配置为例,直接看图:
Webhooks中的关键配置:
URL
: 即请求的url,这里的URL填写的是Jenkins中的Webhooks的Url;
Trigger
: 触发请求的事件/动作,Trigger
里的诸多配置也是一看就能懂,我只配置了Push Events
和Merge Request Events
,Push Events
中也没有写分支名称就意思是所有分支。
Secret token
: 相当于密钥,可以自己填写固定值,或者自动生成。如果是自己填写,则生成的url后面参数是token=填写的值
,如果是自动生成的,url后面参数是key=自动生成的值
;不论怎样生成,这个值在后面Jenkins配置中会用到。
最下面有Test
按钮可以点击测试Webhooks,Recent events
就能显示最近发送的请求的列表,View details
里可以看到发送的请求的详细参数、请求头及响应结果等;
Jenkins配置
Jenkins中需要安装相关企业微信的插件,我用的是QY Wechat Notification Plugin
(有点小瑕疵),如果是钉钉,插件有DingTalk
, 或者在Jenkins Plugins中自己搜索;另外一个插件是Generic Webhook Trigger
,相当于处理其他客户端的请求触发Jenkins的构建。
构建触发器——Generic Webhook Trigger配置
Post content parameters中配置的就是参数,我用三个参数$ref
,$project.git_ssh_url
及token
来确定是哪个仓库代码来触发jenkins,其实就是对应的Gitlab仓库触发对应的jenkins项目构建;如果想用其他参数,回到GitLab测试Webhooks时的View details
按钮,点进去仔细看。
QY Wechat Notification Plugin配置
安装完插件后,在Jenkins的项目中进行配置,增加构建后的步骤中会多一项: 企业微信通知
点击后,需要进行配置
因为是内网环境就没有填写UserId和手机号(也没实际试过),更多消息中这个插件只支持markdown格式,而企业微信机器人默认支持文本(text)、markdown(markdown)、图片(image)、图文(news)四种消息类型。
总结一下大概流程:
本地提交代码,推送Git仓库,Webhooks配置了Url,向Jenkins发送请求,Jenkins根据请求携带的参数触发对应项目的构建,待构建完成后, 向企业微信推送消息。
这里面要配两次Webhooks的地址,注意别配错了。不同的软件版本和插件可能配置会有差异。
最后看一下推送后的消息