jenkins配置钉钉通知发布日志

926 阅读3分钟

介绍

CICD(持续集成、持续部署)是现如今的项目常见的需求,而Jenkins是最为热门的开源自动化服务,使用Jenkins可以轻易地实现CICD。

除了自动化执行构建任务外,通知相关人员构建的信息也是非常重要的一环。为了能及时接收消息,我们可以考虑使用钉钉。钉钉提供了webhook方式的API可用于自动化发送消息。在构建过程中,利用钉钉API发送构建的信息,可以准确及时的发现CICD错误,监听构建过程。

本文将介绍如何利用Jenkins配置钉钉通知,发布git commit message等构建信息。

钉钉机器人通知

钉钉提供了群聊机器人的功能,可以提供webhook在群聊中自动发布消息。

在群聊的群设置中,有添加机器人的选项,选择自定义机器人。

1.jpg

完成机器人名称等配置后,会获得一个带有token的链接,向这个链接发送消息就可以被机器人接收到。机器人还有三种安全策略:

  1. 自定义关键词(在发送消息中必须包含关键词)
  2. 加签(利用HmacSHA256算法计算签名)
  3. 限制IP地址

三种方案各有优劣,按照自身项目需求决定即可。

通过webhook可以发送多个格式的消息:

  1. 纯文本
  2. Markdown
  3. 图片
  4. 链接
  5. 卡片
  6. 语音
  7. 文件
  8. 视频

由于我们需要发送构建相关信息,包括git commit message,在这里使用markdown格式会更为合适。

{
     "msgtype": "markdown",
     "markdown": {
         "title":"杭州天气",
         "text": "#### 杭州天气 @150XXXXXXXX \n> 9度,西北风1级,空气良89,相对温度73%\n> ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\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_COMMITGIT_COMMIT两个参数。利用git log这两个参数我们可以获取到从上次成功构建到本次构建的提交信息。

git log命令的参数非常多,这里只介绍使用到的部分:

  1. 限制log范围的${SHA1}..${SHA2}。注意SHA1这条记录是不包含在输出中的。
  2. 格式化输出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
     }
   }'

2.jpg

总结

本文介绍了最基础的jenkins发送git日志的方式,希望通过介绍这一简单的过程,让你对设置Jenkins构建推送消息有所了解。其中仍有很多需拓展的地方,如增加项目信息,构建成功、失败的通知提示等。但在理清流程后,后续的开发自然不在话下了。

参考链接

open.dingtalk.com/document/or…

open.dingtalk.com/document/ro…

git-scm.com/docs/git-lo…

stackoverflow.com/questions/4…

stackoverflow.com/questions/2…

plugins.jenkins.io/git/#plugin…

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天