介绍
CICD(持续集成、持续部署)是现如今的项目常见的需求,而Jenkins是最为热门的开源自动化服务,使用Jenkins可以轻易地实现CICD。
除了自动化执行构建任务外,通知相关人员构建的信息也是非常重要的一环。为了能及时接收消息,我们可以考虑使用钉钉。钉钉提供了webhook方式的API可用于自动化发送消息。在构建过程中,利用钉钉API发送构建的信息,可以准确及时的发现CICD错误,监听构建过程。
本文将介绍如何利用Jenkins配置钉钉通知,发布git commit message等构建信息。
钉钉机器人通知
钉钉提供了群聊机器人的功能,可以提供webhook在群聊中自动发布消息。
在群聊的群设置中,有添加机器人的选项,选择自定义机器人。
完成机器人名称等配置后,会获得一个带有token的链接,向这个链接发送消息就可以被机器人接收到。机器人还有三种安全策略:
- 自定义关键词(在发送消息中必须包含关键词)
- 加签(利用HmacSHA256算法计算签名)
- 限制IP地址
三种方案各有优劣,按照自身项目需求决定即可。
通过webhook可以发送多个格式的消息:
- 纯文本
- Markdown
- 图片
- 链接
- 卡片
- 语音
- 文件
- 视频
由于我们需要发送构建相关信息,包括git commit message,在这里使用markdown格式会更为合适。
{
"msgtype": "markdown",
"markdown": {
"title":"杭州天气",
"text": "#### 杭州天气 @150XXXXXXXX \n> 9度,西北风1级,空气良89,相对温度73%\n> \n> ###### 10点20分发布 [天气](https://www.dingalk.com) \n"
}
}
jenkins与Git
在Jenkins安装过程会提示安装git plugin,提供这个插件我们才能在Jenkins与git进行连接。
而在Jenkins执行构建指令前,git plugin会在上下文中注入多个环境变量:
| 变量 | 介绍 |
|---|---|
| GIT_BRANCH | 正在构建的分支的名称,包括远程名称,如origin/master |
| GIT_LOCAL_BRANCH | 正在构建的分支名称没有远程名称,如master |
| GIT_COMMIT | 此构建中使用的提交的 SHA-1 |
| GIT_PREVIOUS_COMMIT | 在此项目的先前构建中使用的提交的 SHA-1 |
| GIT_PREVIOUS_SUCCESSFUL_COMMIT | 此项目最近一次成功构建中使用的提交的 SHA-1 |
| GIT_URL | 此工作区中第一个 git 存储库的远程 URL |
| GIT_URL_n | 此工作区中其他 git 存储库的远程 URL(如果有) |
| GIT_AUTHOR_EMAIL | 将用于此工作区中新提交的作者电子邮件地址 |
| GIT_AUTHOR_NAME | 将用于此工作区中新提交的作者姓名 |
| GIT_COMMITTER_EMAIL | 将用于此工作区中新提交的提交者电子邮件地址 |
| GIT_COMMITTER_NAME | 将用于此工作区中新提交的提交者名称 |
其中我们所需要的是GIT_PREVIOUS_SUCCESSFUL_COMMIT和GIT_COMMIT两个参数。利用git log这两个参数我们可以获取到从上次成功构建到本次构建的提交信息。
git log命令的参数非常多,这里只介绍使用到的部分:
- 限制log范围的
${SHA1}..${SHA2}。注意SHA1这条记录是不包含在输出中的。 - 格式化输出
pretty=format。格式化的参数也很多,我们拿提交人与提交信息为例--pretty=format:"%cn: %s"。
在发送日志时,推荐使用无序列表的形式:- message \n - message。
下面是整理后的代码
GIT_LOG=$(git log ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}..${GIT_COMMIT} --pretty=format:"- %cn: %s\n")
curl -X POST "https://oapi.dingtalk.com/robot/send?access_token=${DingdingToken}" \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "markdown",
"markdown": {
"title": "[日志]",
"text": "### 【构建日志】 \n '"${GIT_LOG}"'\n [查看构建]('${JENKINS_URL}')"
},
"at": {
"isAtAll": false
}
}'
总结
本文介绍了最基础的jenkins发送git日志的方式,希望通过介绍这一简单的过程,让你对设置Jenkins构建推送消息有所了解。其中仍有很多需拓展的地方,如增加项目信息,构建成功、失败的通知提示等。但在理清流程后,后续的开发自然不在话下了。
参考链接
open.dingtalk.com/document/or…
open.dingtalk.com/document/ro…
stackoverflow.com/questions/4…
stackoverflow.com/questions/2…
plugins.jenkins.io/git/#plugin…
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天