Jenkins:如何给coding的项目绑定钉钉机器人

本文详细介绍了如何在钉钉群中设置自定义机器人,并通过安全设置确保消息的有效性和安全性。同时,还介绍了如何在项目中配置WebHook以实现自动化的消息推送。

写在前面的话:

之前想弄这个功能来着,但是不巧,钉钉的Webhook正好在维护,就搁置了。于是每次合并代码之类的,我都会对着老大喊一嗓子,同意一下呗。今天喊了一嗓子后,老大说:你快弄下那个机器人提醒吧。哈哈,可能受不了我突然的一嗓子~弄好之后趁着热乎劲,顺便记录一下过程,方便以后再用,老话说–好记性不如烂笔头。

钉钉上:

首先你得有个群,并且是群管理员,然后点击 群助手>添加机器人

在这里插入图片描述

选择自定义>添加

在这里插入图片描述
输入机器人名字,设置头像,完成安全设置(下面介绍),勾选,点击完成。

华丽丽的分割线开始:以下内容粘贴自钉钉开发文档

安全设置

安全设置目前有3种方式:

(1)方式一,自定义关键词

最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。

例如:添加了一个自定义关键词:监控报警

则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功。

(2)方式二,加签

第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。

在这里插入图片描述
签名计算代码示例(Java)

Long timestamp = System.currentTimeMillis();
String stringToSign = timestamp + “\n” + secret;
Mac mac = Mac.getInstance(“HmacSHA256”);
mac.init(new SecretKeySpec(secret.getBytes(“UTF-8”), “HmacSHA256”));
byte[] signData = mac.doFinal(stringToSign.getBytes(“UTF-8”));
return URLEncoder.encode(new String(Base64.encodeBase64(signData)),“UTF-8”);

签名计算代码示例(Python)

#python 2.7
import time
import hmac
import hashlib
import base64
import urllib

timestamp = long(round(time.time() * 1000))
secret = 'this is secret'
secret_enc = bytes(secret).encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)

第二步,把 timestamp和第一步得到的签名值拼接到URL中。

在这里插入图片描述

https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX

(3)方式三,IP地址(段)

设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP、IP段,暂不支持IPv6地址白名单,格式如下:

在这里插入图片描述

注意:安全设置的上述三种方式,需要至少设置其中一种,以进行安全保护。
校验不通过的消息将会发送失败,错误如下:

// 消息内容中不包含任何关键词
{
  "errcode":310000,
  "errmsg":"keywords not in content"
}

// timestamp 无效
{
  "errcode":310000,
  "errmsg":"invalid timestamp"
}

// 签名不匹配
{
  "errcode":310000,
  "errmsg":"sign not match"
}

// IP地址不在白名单
{
  "errcode":310000,
  "errmsg":"ip X.X.X.X not in whitelist"
}

华丽丽的分割线结束。
多说句废话,我选择了最简单的第一种,第二种我没太看懂(小菜鸡),第三种有点麻烦的样子。

点击完成后页面如下:

在这里插入图片描述

到现在为止机器人就设置好了,接下来就是在codding中使用了。
项目中:
首先你有个项目(废话真多)并且得是项目管理员,找到项目设置>开发者选项>WebHook

在这里插入图片描述

点击 新建WebHook

在这里插入图片描述

输入相关内容,url就是刚才生成的WebHook地址,监听事件根据自己需要勾选,最后点击 新建WebHook 就OK了。

在这里插入图片描述
接下来就可以看到自己添加的记录了,并且状态是成功发送(绿色的√)。此时,钉钉群将会收到一条测试推送。

在这里插入图片描述

下面是我测试机器人的消息:

在这里插入图片描述

应该似乎没啥问题了吧。
提醒一下下:如果在钉钉群重置了WebHook地址,一定要去项目中同步更新一下哦

Jenkins 中集成钉钉机器人以发送构建通知消息,通常需要以下几个步骤完成配置。以下是针对 Pipeline 和 Freestyle 项目的具体操作流程。 ### 安装插件 首先,在 Jenkins 的插件管理中安装 **DingTalk Jenkins** 插件。这是实现 Jenkins钉钉机器人通信的基础[^1]。 ### 创建钉钉机器人 前往钉钉群设置中的“机器人”选项,添加一个自定义机器人,并获取其 Webhook 地址。同时,可以设置机器人的名称和头像,以及选择是否艾特特定成员或全体成员[^3]。 ### Jenkins 全局配置 进入 Jenkins 的系统设置页面(Manage Jenkins -> Configure System),找到 DingTalk 配置部分,填写之前获取的 Webhook 地址和其他可选参数,如默认的机器人名称等。 ### Pipeline 项目配置 对于使用 Declarative Pipeline 的项目,可以在 `pipeline` 块内添加 `post` 段落来定义不同构建状态下的通知行为。以下是一个示例代码块: ```groovy pipeline { agent any stages { // ... your stages here ... } post { success { dingtalk( robot: 'Jenkins_Dingding', type:'MARKDOWN', title: "成功: ${env.JOB_NAME}", text: [ "- 成功构建:${env.JOB_NAME}项目!\n", "- 版本:${env.version}\n", "- 持续时间:${currentBuild.durationString}\n", "- 任务:#${env.JOB_NAME}" ] ) } failure { dingtalk( robot: 'Jenkins-Dingding', type:'MARKDOWN', title: "失败: ${env.JOB_NAME}", text: [ "- 失败构建:${env.JOB_NAME}项目!\n", "- 版本:${env.version}\n", "- 持续时间:${currentBuild.durationString}\n", "- 任务:#${env.JOB_NAME}" ] ) } } } ``` ### Freestyle 项目配置 对于 Freestyle 项目,可以在项目的配置页面中找到构建后操作区域,添加 "DingTalk" 发送消息的动作。这里可以选择已经配置好的机器人,也可以手动输入 Webhook URL,并编辑要发送的消息内容[^2]。 通过以上步骤,就可以实现在 Jenkins 构建完成后自动向钉钉群组发送通知的功能。确保所有参数正确无误,并测试一次构建过程来验证通知是否能够正常发送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值