访次: AmazingCounters.com 次

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 表示的一个网段

 

   

加签

加签的方式是钉钉机器人与开发者双向进行安全认证,以此来验证安全性。具体加签计算步骤如下:

  1. 将时间戳 timestamp 和密钥 secret 当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。

  2. 由于我这里使用的是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}&timestamp={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)

 

posted @ 2024-03-13 17:15  IT老登  阅读(369)  评论(0编辑  收藏  举报
访次: AmazingCounters.com 次