gitlab-ci 使用钉钉进行Job通知
首先注册登录钉钉 自行查询方法吧
1、这里要提一下钉钉 注册登录好之后在手机上是无法看到钉钉的webhook 信息的,需要使用PC 登录查看具体方法如下
首先钉钉创建群聊,
选择机器人
添加机器人
我这里添加了两个机器人 gitlab 和 自定义
先了解下gitlab机器人配置方法如下
gitlab机器人添加好以后 在PC端 点击头像选择机器人设置
然后复制webhook 地址 打开gitlab页面的项目下的 webhook
然后将刚刚复制的 webhook地址 复制粘贴
具体下面的权限按需选择
gitlab 通知配置完成
下面介绍自定义机器人配置方法
还是打开 钉钉PC端添加机器人页面
这里主要介绍加签方法,至于自定义关键词 还有IP地址段 方法就是字面意思理解 后面可能会更新这两种方法
前提条件
完成创建自定义机器人流程。
自定义关键词
最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。
例如添加了一个自定义关键词:监控报警,则这个机器人所发送的消息,必须包含监控报警这个词,才能发送成功。
IP地址(段)
设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP地址和IP地址段,暂不支持IPv6地址白名单,格式如下:
格式 |
说明 |
1.1.1.1 |
开发者的出口公网IP地址(非局域网地址) |
1.1.1.0/24 |
用 CIDR 表示的一个网段 |
加签
加签的方式是钉钉机器人与开发者双向进行安全认证,以此来验证安全性。具体加签计算步骤如下:
-
将时间戳 timestamp 和密钥 secret 当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
- 由于我这里使用的是python3 执行的 所以需要使用 python3 来安装 依赖
sudo yum install python3-pip pip3 install --upgrade pip pip3 install some-package sudo python3 -m pip install requests
签名计算代码示例(Python)
#python 3.8 import time import hmac import hashlib import base64 import urllib.parse timestamp = str(round(time.time() * 1000)) secret = 'this is secret' secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) print(timestamp) print(sign)
import hmac # 导入hmac模块,用于创建签名 import hashlib # 导入hashlib模块,用于提供哈希算法 import base64 # 导入base64模块,用于编码二进制数据为ASCII字符串 import time # 导入time模块,用于获取当前时间 import urllib.parse # 导入urllib.parse模块,用于URL编码 import requests # 导入requests模块,用于发送HTTP请求 import json # 导入json模块,用于处理JSON数据 # 钉钉机器人的Webhook地址和访问令牌 #Webhook地址是钉钉机器人接收消息的接口,access_token是授权令牌,用于验证发送方的身份 DINGTALK_WEBHOOK_URL = "https://oapi.dingtalk.com/robot/send?access_token=8b559204d001f438cef8f189efd3049de263b8138fa77029d59d04d59bfabe" # 钉钉机器人的密钥 # SECRET是钉钉机器人的安全密钥,用于生成签名,确保消息来源的合法性 SECRET = "SEC43968a0a53be0fcc0c8d8a51d6a3e83b2773826ac81cbd44804b2f2f430ad1" # 获取当前的时间戳(毫秒级) # 用于签名计算,确保消息的新鲜性 timestamp = int(round(time.time() * 1000)) # 拼接签名字符串 # 签名字符串由时间戳和密钥组成,中间用换行符分隔 sign_string = f"{timestamp}\n{SECRET}" # 使用HMAC-SHA256算法计算签名 # HMAC-SHA256是一种哈希算法,通过密钥和消息内容生成一个固定长度的哈希值 signature = hmac.new(SECRET.encode('utf-8'), sign_string.encode('utf-8'), hashlib.sha256).digest() # 将签名进行base64编码 # base64编码可以将二进制数据转换为ASCII字符串,方便在URL中传输 signature_base64 = base64.b64encode(signature).decode('utf-8') # 对签名进行URL编码 # URL编码可以将特殊字符转换为可在URL中安全传输的格式 encoded_signature = urllib.parse.quote_plus(signature_base64) # 构造最终的请求URL,包括签名和时间戳参数 # 将签名和时间戳参数拼接到Webhook地址后,形成���整的请求URL request_url = f"{DINGTALK_WEBHOOK_URL}×tamp={timestamp}&sign={encoded_signature}" # 构造消息体JSON(包含@所有人的标记) # 消息体定义了要发送给钉钉机器人的内容,包括消息类型和具体内容 message_json = { "msgtype": "text", # 消息类型为文本 "text": { "content": "Hello, this is a test message from DingTalk robot using a Python script. @所有人 Please pay attention." # 文本消息的具体内容,包含@所有人的标记 }, "at": { "atMobiles": [], # 可以指定手机号列表进行@提醒,留空则不指定 "isAtAll": True # 设置为True以@所有人,即不区分具体人员,全体提醒 } } # 发送POST请求到钉钉机器人 # 使用requests库发送一个POST请求到构造好的请求URL,并将消息体作为请求体发送 headers = {'Content-Type': 'application/json'} # 设置请求头,指定请求体为JSON格式 response = requests.post(request_url, data=json.dumps(message_json), headers=headers) # 输出响应内容 # 打印钉钉机器人返回的响应内容,通常包含发送结果的信息 print(response.text)
本文来自博客园,作者:IT老登,转载请注明原文链接:https://www.cnblogs.com/nb-blog/p/18071093