Jenkins之钉钉通知
# 一、前言
Jenkins作为一款非常受用的CI/CD
工具,相信很多公司项目构建发布都是直接依赖于该工具。试想一下,我们job任务并不是说点击构建按钮之后就会立即发布成功,因为涉及到很多步骤,特别构建的时候,会持续一段时间,这里如果我们不持续关注,可能会在某一个阶段失败了,我们并不能立即知情,因此需要接入一个webhoook
机制,把构建结果通知我们。
钉钉相信很多人都在使用,而且对于Jenkins也有现成的钉钉插件 (opens new window),因此我们这里介绍下Jenkins结合钉钉发送构建通知的操作。
# 二、安装
登录Jenkins至插件管理中心,搜索DingTalk
,点击安装,然后重启Jenkins即可
# 2.1 钉钉配置
新版本(我这里Jenkins版本2.387,DingTalk版本2.7.0),在系统管理最下方的未分类里面
# 2.2 配置参数
钉钉创建机器人这里就不说了,这里需要注意的就是,这里安全验证使用的是
加密方式
,对应机器人的加签
、
- 机器人全局配置
- 机器人参数配置
# 2.3 测试
上面我们配置好相关参数之后,可以点击机器人配置页面右下角测试按钮,测试下是否可以正常发生信息,没有问题点击保存即可
- 查看钉钉信息
# 三、freestyle 项目中使用
# 3.1 job任务添加机器人
在项目配置的
General
选项卡中找到钉钉配置
,勾选需要的机器人
# 3.2 效果测试
新增机器人配置之后,默认不需要配置其他,点击构建,就会触发钉钉通知
可以看到,这里不仅会显示执行人
,也会显示job的持续构建时间
,这些信息都是DingTalk
内置的信息,如果想要定义更多,则需要自定义信息。
# 3.3 自定义消息
- 内容配置
- 查看效果
# 四、 pipeline 中使用
使用pipline
,这里我们在post
代码段进行配置,这里对应的就是job任务执行后进行相关的操作
# 4.1 pipline机器人配置
pipline
流水线配置
post {
success {
dingtalk (
robot: '120039c5-1111-4d7d-9461-f7499be9cb75',
type: 'ACTION_CARD',
title: "${JOB_BASE_NAME}构建",
text: [
"### [测试消息]($JOB_URL)",
"",
"---",
"",
"- 任务:[#$BUILD_ID]($BUILD_URL)",
"- 状态:<font color=green>success</font>"
]
)
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 效果查看
- 总结
通过上面配置的pipline
钉钉脚本我们可以看到,发送告警内容信息配置更加灵活,但是这里有一个问题就是,pipeline中的全局变量,默认是不支持获取当前构建任务的构建人的,要想获取构建人的信息,只能通过插件来帮助我们获取,因为我们需要这些信息,因此我们默认的使用会有很大的局限性,接下来我们通过安装build user vars (opens new window)进行构建信息的发送。
# 4.2 安装插件
同样到插件中心,搜索
build user vars
,安装后重启Jenkins
# 4.3 配置进阶流水线脚本
post {
always {
script {
catchError{
wrap([$class: 'BuildUser']) {
buildTime = currentBuild.durationString.split("and")[0]
if(currentBuild.currentResult == "SUCCESS"){
statusColor = "#4CC417"
status = "成功"
}else if(currentBuild.currentResult == "FAILURE"){
statusColor = "#FF0000"
status = "失败"
}else if(currentBuild.currentResult == "ABORTED"){
statusColor = "#529578"
status = "取消"
} else {
statusColor = "#9D9D9D"
status = "未知"
}
dingtalk (
robot: '120039c5-1111-4d7d-9461-f7499be9cb75',
type: 'MARKDOWN',
title: "${JOB_BASE_NAME}构建通知",
text: [
"### [$JOB_BASE_NAME]($JOB_URL)通知",
"",
"---",
"",
"> * 任务: [#$BUILD_ID]($BUILD_URL)",
"> * 状态: <font color=$statusColor>$status</font>",
"> * 持续时间: $buildTime",
"> * 执行人: ${BUILD_USER}"
]
)
}
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
- 查看效果
- 配置解读
always
这里配置到always
模块中,主要是为了保证无论成功失败都可以发送,通过判断构建成功失败状态,这样不用在每个模块中都定义dingtalk逻辑。
catchError
catchError
是pipline
中的一个错误处理模块,用于捕获步骤执行过程中的错误,并在出现错误时执行相应的操作,这里我们使用catchError
捕获构建过程中的错误,并使用currentBuild.result
来获取实际的构建结果。
如果不使用该错误处理模块,有可能会受到wrap([$class: 'BuildUser'])
包装器的影响,导致currentBuild.result
获取的值总是SUCCESS
,从而影响判断。
wrap([$class: 'BuildUser'])
wrap
是用来包装构建环境的步骤或指令,$class
用来指定类包装器,BuildUser
包装器名称,需要安装build user vars
插件才可以,这里指会在包装的代码块中记录与用户相关的信息,例如用户名、用户ID等。这样,我们就可以在构建过程中获取和使用这些信息。
currentBuild
currentBuild
内置变量,包含很多属性和方法,可以在流水线语法,全局变量中查看,通过这些属性和方法获取相关构建信息,对于后续构建报告、通知、日志记录和后续处理非常有用。
dingtalk
dingtalk
,发送信息至钉钉机器人相关的配置,其中robot
是前面在系统配置中机器人的ID
,告警信息内容,可以自己按照MARKDOWN
格式自定义,不过需要注意使用变量时,需要确保可以正常获取对应的变量值,否则会出现异常等信息。