首页 > 其他分享 >gitlab-ci 使用钉钉进行Job通知

gitlab-ci 使用钉钉进行Job通知

时间:2024-03-13 17:24:21浏览次数:29  
标签:ci 机器人 URL gitlab sign base64 Job 签名 import

首先注册登录钉钉 自行查询方法吧

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)

 

标签:ci,机器人,URL,gitlab,sign,base64,Job,签名,import
From: https://www.cnblogs.com/nb-blog/p/18071093

相关文章

  • Gitlab怎么删除仓库
    按以下步骤删除一个仓库选择项目进入设置设置-通用拖动到底部点击高级-展开点击删除项目输入项目名称确认删除......
  • 佳佳的 Fibonacci
    题面\(f_x=\begin{cases}1&x\in\{1,2\}\\f_{x-1}+f_{x-2}&x\geq3\\\end{cases}\)求\(1\timesf_1+2\timesf_2+3\timesf_3+…+n\timesf_n\)。解法正常的Fibonacci前n项和\(loj\)如果卡死了用这个:Fibonac......
  • ModuleNotFoundError: No module named ‘Crypto.Cipher‘或‘Crypto 的终极解决方案(
    转发源文档:https://juejin.cn/post/7120133494012903454 本文之前在c平台发布过,主要给出了此类问题的终极解决方案。亲测有效,且网友尝试后均解决问题! 长期以来,我对于ModuleNotFoundError:Nomodulenamed'Crypto.Cipher'问题和ModuleNotFoundError:Nomodulenamed'Cry......
  • 【论文阅读】THEMIS: Fair and Efficient GPU Cluster Scheduling
    11.THEMIS:FairandEfficientGPUClusterScheduling出处:2020USENIXThemis:公平高效的GPU集群调度|USENIX主要工作:使用拍卖机制,针对长时间运行、位置敏感的ML应用程序。任务以短期的效率公平来赢取投标但确保长期是完成时间公平性。对每个ML应用程序......
  • 如何配置极狐GitLab Runner Cache 缓存
    本文作者:徐晓伟GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。极狐GitLabRunnerCache缓存支持S3标准协议,如:OSS、OOS等等支持S3......
  • 使用Jenkins搭建CI/CD服务器
    1、为什么要用CI/CD软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少基于有缺陷或失败的先前版本开发新代码......
  • docker-compose 部署gitlab
    主机ip:192.168.1.139[root@localhostgitlab_docker]#catdocker-compose.ymlversion:'3.1'services:gitlab:image:'gitlab/gitlab-ce:latest'container_name:gitlab#随着docker重启自动启动restart:alwaysenvironment:......
  • SciTech-Mathmatics-RealAnalysis: Cantor-Schröder-Bernstein Theorem
    Cornell:https://www.cs.cornell.edu/courses/cs2800/2017fa/lectures/lec14-cantor.htmlUCLA:https://web.cs.ucla.edu/~palsberg/course/cs232/papers/bernstein.pdfhttps://artofproblemsolving.com/wiki/index.php/Schroeder-Bernstein_Theoremhttps://www.whitman.e......
  • 如何在Anolis 8 安装 极狐GitLab Runner
    GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。基于Anolis龙蜥8和极狐GitLab官方仓库脚本安装/配置极狐GitLabRunner说明我们先......
  • .Net 创建webhooks Demo,可用于Gitlab等Workflow
    框架:.Net6、webapipackage:GitLabApiClient定义body参数DTO,不同event有不同的参数,具体可参考gitlab文档:https://docs.gitlab.com/ee/user/project/integrations/webhook_events.htmlpublicclassGitLabWebhookData{publicstringRef{get;set;}publicstring......