写在前面的话
在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境。
目前我们内部有做类似的需求:产品提交原型到 gitlab,然后 gitlab 分支变动触发 Jenkins 构建,将最新的产品原型发布到 nginx 配置的网页访问目录。更新完成以后通过钉钉机器人提供的 webhook 在公司群里通知大家,并打印出本次提交者是谁,提交的内容是啥。
配置 Gitlab 触发 Jenkins 自动构建
需要的插件有:GitLab 和 Gitlab Hook
1. 我们在插件中心可以搜索到:
直接安装重启!
特别说明:
网上有很多教程,到这一步以后一般都是去 Gitlab 的用户设置里面配置 Access Token,然后再将 Token 配置到 Jenkins 的系统配置中 GitLab 项里面,其实根本就不需要。
我们后面 Jenkins 连接 GitLab 认证通信是通过 Jenkins 本身配置 GitLab 账户来拉取代码。
GitLab 触发 Jenkins 构建则是通过 Jenkins 提供给 GitLab 的 Token。
至始至终那个配置都没用到,所以网上大多教程其实都是你抄我我抄你走冤枉路。
2. 创建一个测试新任务:
配置任务 GIT 地址:
配置自动构建:
添加构建操作:
保存配置!
3. Gitlab 配置项目连接 Jenkins:
4. 提交 Gitlab 项目的 Master 分支测试自动构建:
此时会过来查看 Jenkins:
可以看到触发构建成功,而且可以看到是谁提交了代码触发的构建!
5. 至此,Gitlab 分支提交代码自动触发构建的配置完成,我们甚至可以在 GitLab 上面查看触发记录:
在我们之前编辑 Token 的地方,点击编辑我们的 Token:
在编辑的最下方可以看到执行记录:
钉钉脚本扩展
如我一开始说到的,有些时候我们需要达到通知的目的,因为近来的公司都用钉钉,所以专门做了一个钉钉机器人的脚本用来将我们构建的信息发送到群里,达到通知的目的。
Jenkins 目前本身已经具有了钉钉的插件,但是个人觉得不是很好用,所以就自己写了脚本,用于测试。
为了更好的结合 GitLab 使用,我们需要用到一个第三方插件,这是项目的开源地址:
这是打包好的插件下载地址:
链接: https://pan.baidu.com/s/1yqxEoJAxFbTGWHrO5lHu3Q 提取码: rjcj
该插件能帮助我们获取到一些 GitLab 用户提交信息!
1. 下载后 Jenkins 本地安装该插件:
上传安装该插件,不需要重启 Jenkins!
2. 构建的前面多个 构建环境 这一项,下图是我们配置的内容:
内容:
%1$s\n\n更新内容:%3$s
3. 修改构建,加入我们的脚本:
脚本内容如下:
#!/bin/bash ################################################################# # 作者:Dylan <1214966109@qq.com> # 日期:2019-07-18 # 作用:机器人通知 ################################################################# ################################################################# # 钉钉消息通知 ################################################################# function SEND_MESSAGE_TO_DINGDING() { /usr/bin/curl "$1" -H 'Content-Type: application/json' -d " { \"actionCard\": { \"title\": \"$2\", \"text\": \"$3\", \"hideAvatar\": \"0\", \"btnOrientation\": \"0\", \"btns\": [ { \"title\": \"$2\", \"actionURL\": \"$4\" } ] }, \"msgtype\": \"actionCard\" }" } ################################################################# # 钉钉消息变量 ################################################################# # 当前时间 TIME_NOW=$(date +%Y年%m月%d日-%H:%M:%S) # 机器人 webhook 地址 DINGDING_TOKEN_URL='https://oapi.dingtalk.com/robot/xxxxxx' # 消息标题 DINGDING_TITLE="Oops,GitLab项目更新啦~" # 消息正文 DINGDING_CONTENT="更新用户:${SCM_CHANGELOG}\n\n更新时间:${TIME_NOW}" # Jenkins 地址 JENKINS_URL='http://192.168.10.202:8080/jenkins' # Jenkins 构建日志地址 JENKINS_JOB_URL="${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/console" ################################################################# # 发送钉钉消息 ################################################################# SEND_MESSAGE_TO_DINGDING ${DINGDING_TOKEN_URL} ${DINGDING_TITLE} ${DINGDING_CONTENT} ${JENKINS_JOB_URL}
注意上图红色部分需要替换成为自己的配置!
如果不知道怎么配置钉钉机器人的 webhook,可以参考我另外一篇博客:
4. 此时提交代码测试,最终钉钉消息:
5. 至此通知配置完成!
小结
GitLab 提交触发自动构建是一个很常见的需求,我们可以通过这个配置降低人力成本。
另外如果你公司没有使用钉钉也没有关系,你可以考虑个人钉钉账号,然后拉一个群,但是群有需求,就是必须 3 个人才能创建。
你可以通过先拉人创建完群以后再将人踢掉的方式创建群。
当然,如果你们部门不止你一个人,那就更简单了。我目前 zabbix 告警,Jenkins 上线,以前其他各种需求几乎都是和钉钉机器人结合起来用的。