怎么在 Jenkins 流水线中配置钉钉机器人构建通知

文章导读
在 Jenkins 流水线中配置钉钉通知,最稳妥的方式是安装专用的 DingTalk 插件并在系统配置中绑定 Webhook,适合大多数常规构建场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

在 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 插件

进入 Jenkins 管理界面,选择“插件管理”,在可选插件中搜索“DingTalk”(建议认准插件 ID 为 dingtalk 或作者为 xiaojunchn 的版本),勾选并安装。安装完成后根据页面提示操作,多数情况下无需重启即可生效。

第三步:配置系统全局设置

进入“系统管理” -> “系统配置”,找到 DingTalk 部分。添加新机器人,填入刚才复制的 Webhook 地址。如果钉钉端开启了加签,需在插件配置中填入 Secret。保存配置。

第四步:编写流水线脚本

怎么在 Jenkins 流水线中配置钉钉机器人构建通知

在 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
  • 钉钉开放平台:自定义机器人接入文档