Jenkins配置钉钉通知
Jenkins配置钉钉通知
说起来添加钉钉通知的原理很简单,钉钉生成一个订阅地址(API接口),Jenkins相关步骤去调用这个订阅地址即达到通知效果。
创建钉钉机器人
注意:钉钉机器人需要群主开放权限才能创建。
建群,打开【群设置】->【智能群助手】->【添加机器人】->【自定义 WebHook接入】
安全设置选三者之一。这里我选择【自定义关键词】方式。
点击完成后会有一串webhook接口地址,也需记住。
安装钉钉插件
打开Jenkins的Dashboard,安装插件。
打开【系统管理】->【插件管理】,安装"DingTalk"插件并重启。
打开【系统管理】->【系统配置】翻到“钉钉”配置位置,新增配置。
机器人Id不用填,保存时自动分配,在webhook上添加顶顶机器人接口地址,加密处添加加签密码。
点击测试,钉钉群会收到配置信息。
安装用户构建插件
安装用户构建插件“build user vars”,安装步骤同上。
可获得如下参数
Variable | Description |
---|---|
BUILD_USER | Full name (first name + last name) |
BUILD_USER_FIRST_NAME | First name |
BUILD_USER_LAST_NAME | Last name |
BUILD_USER_ID | Jenkins user ID |
BUILD_USER_GROUPS | Jenkins user groups |
BUILD_USER_EMAIL | Email address |
安装后还要在【系统管理】->【系统配置】滑到【Build User Variables】选项,勾选生效。勾选后直接在全局变量中生效。否则需要用warp包装使用。
包装使用
always {
echo 'This will always run'
wrap([$class: 'BuildUser']) {
sh 'echo "${BUILD_USER}"'
}
}
钉钉机器人开发权限
不确定是否一定要机器人开发权限。我是遇到webhook地址curl失败的问题,然后让管理员给了钉钉机器人开发权限。
开通方式参照如下地址。
https://developers.dingtalk.com/document/app#/serverapi2/qf2nxq
流水线配置
在工程中添加Jenkinsfile文件。内容如下:
pipeline {
agent any
stages {
stage("stage 1: Test dingding notify") {
steps {
echo 'Test dingding notify'
script {
env.commit = "${sh(script:'git log --oneline --no-merges|head -1', returnStdout: true)}"
}
}
}
}
post {
always {
echo 'This will always run'
wrap([$class: 'BuildUser']) {
sh 'echo "${BUILD_USER}"'
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece' -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content": "Jenkins提醒。部署服务:${JOB_NAME} \n构建分支: ${BRANCH_NAME}\n构建ID: ${BUILD_ID}\n提交信息:${commit}构建状态:${currentBuild.currentResult}"}}'"""
}
}
success {
echo 'successful'
}
failure {
echo 'failed'
}
}
}
将推送消息放到always里,任何构建都会推送消息。
warp
包装器圈定BuildUser
使用范围。本例安全机制是使用关键字的方式,Jenkins
作为关键字才能推送成功。
currentBuild.currentResult
可以打印出结果,详情可参考https://issues.jenkins.io/browse/JENKINS-56402
注意:文件中的中文可能会乱码,注意添加转码配置。
钉钉消息格式
消息格式参考管网接口参数说明,可以配置纯文本、markdown、连接等。结合审计流程制造卡点审批等效果
https://developers.dingtalk.com/document/robots/message-types-and-data-format
text
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece' -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153****]},"msgtype":"text","text":{"content": "Jenkins Pipeline. \n:${JOB_NAME} \nBuild branch: ${BRANCH_NAME}\nBuild ID: ${BUILD_ID}\nCommit message:${commit}\nBuild state:${currentBuild.currentResult}"}}'"""
markdown
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece' -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153****]},"msgtype":"markdown","markdown":{"title":"Jenkins 构建提醒", "text":"## Jenkins Message \n![](http://47.119.xx.xx/src/assets//img/girls/11.jpg) \n **Build ID**: ${BUILD_ID} \n**Commit message**: ${commit}\n**Build state**: ${currentBuild.currentResult}"}}'"""
actionCard
"""curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece' -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153***]}, "msgtype":"actionCard","actionCard":{"title":"Jenkins Pipeline.", "text":"## Jenkins Message<br/>![](http://47.119.XX.XX/src/assets//img/girls/15.jpg)<br/>**Build ID**: ${BUILD_ID}<br/>**Commit message**: ${commit}<br/>**Build state**: ${currentBuild.currentResult}<br/>@153","btns":[{"title":"Yes","actionURL":"#"},{"title":"No","actionURL":"#"}]}}'"""
附录
问题1:No such property: BUILD_USER for class: groovy.lang.Binding
安装后还要去全局配置中勾选
问题2:{"errcode":310000,"errmsg":"sign not match, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]"}
调用webhook接口报错,原因是自定义机器人安全机制定义了“加签”,要验证方式。有三种验证方式,具提参考钉钉官方说明文档。https://developers.dingtalk.com/document/robots/customize-robot-security-settings
。
问题3:中文乱码
//TODO