在 Jenkins 流水线中配置钉钉通知,最稳妥的方式是安装专用的 DingTalk 插件并在系统配置中绑定 Webhook,适合大多数常规构建场景。
先说结论:优先使用 Jenkins 社区维护的 DingTalk 插件,比手动写 curl 命令更易维护,适合需要标准化通知的研发团队。
- 适合:需要即时知晓构建状态的研发团队
- 先准备:钉钉群机器人 Webhook 地址及安全设置、确认插件 ID 为 dingtalk
- 验收:触发构建后检查钉钉群是否收到消息
命令速用版
如果你已经完成了插件安装和系统配置,可以在流水线脚本中使用以下片段发送消息:
pipeline {
agent any
stages {
stage('Notify') {
steps {
script {
dingtalk sender: '默认机器人', type: 'TEXT', text: "构建 ${env.BUILD_NUMBER} 完成"
}
}
}
}
}注意:sender 名称需与系统配置中定义的机器人名称一致。
为什么会这样
Jenkins 本身没有内置钉钉通知功能,需要通过插件或 HTTP 请求对接钉钉开放平台的机器人接口。专用插件封装了签名计算和重试机制,比直接在脚本里写 curl 命令更稳定,尤其是在钉钉开启了“加签”安全设置时,插件能自动处理 HMAC-SHA256 签名,避免手动计算出错。
分步处理
第一步:获取钉钉机器人 Webhook
在钉钉群设置中选择“智能群助手”,添加自定义机器人。复制生成的 Webhook 地址,如果开启了“加签”安全设置,务必保存 Secret 密钥。
第二步:安装 Jenkins 插件
进入 Jenkins 管理界面,选择“插件管理”,在可选插件中搜索“DingTalk”(建议认准插件 ID 为 dingtalk 或作者为 xiaojunchn 的版本),勾选并安装。安装完成后根据页面提示操作,多数情况下无需重启即可生效。
第三步:配置系统全局设置
进入“系统管理” -> “系统配置”,找到 DingTalk 部分。添加新机器人,填入刚才复制的 Webhook 地址。如果钉钉端开启了加签,需在插件配置中填入 Secret。保存配置。
第四步:编写流水线脚本
在 Jenkinsfile 中调用 dingtalk 步骤。建议将通知放在 post 块中,确保无论构建成功或失败都能收到通知:
post {
always {
script {
def status = currentBuild.result ?: 'SUCCESS'
dingtalk sender: '默认机器人', type: 'MARKDOWN', text: "## 构建${status}\n任务:${env.JOB_NAME}\n编号:${env.BUILD_NUMBER}"
}
}
}怎么验证是否生效
保存流水线配置后,点击“立即构建”。观察控制台输出是否有插件相关的日志信息,同时检查钉钉群是否在几秒内收到消息卡片。如果未收到,查看 Jenkins 系统日志中是否有连接超时的报错。
常见坑
1. 签名不匹配:如果钉钉端开启了加签,而 Jenkins 插件配置中未填 Secret 或填错,接口会返回 401 错误,消息发送失败。
2. 网络限制:Jenkins 服务器必须能访问外网域名 oapi.dingtalk.com,如果公司内网有防火墙,需要添加白名单。
3. 插件版本差异:不同版本的 DingTalk 插件脚本语法可能略有不同,建议安装后在流水线语法生成器中查看当前版本支持的 snippet。
4. 消息频率限制:钉钉机器人有发送频率限制,不要在循环中频繁调用通知,否则会被限流。
参考来源
- Jenkins 插件仓库:DingTalk Plugin
- 钉钉开放平台:自定义机器人接入文档