Jenkins+Shell+钉钉推送消息

本文介绍了一个自动化流程,通过webhook接收代码提交信息后,在Linux环境下解决中文乱码问题,并使用shell脚本获取提交者信息,最后通过钉钉机器人通知提交者代码已部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:
webhook推送过来消息-
-shell获取代码提交人-
-钉钉告知代码提交人代码已部署
需要首先解决linux中文乱码的问题

https://blog.csdn.net/weixin_39246787/article/details/80581496

a.建一个txt文件,建立手机号与人名的对应关系
在这里插入图片描述
b.获取代码提交人姓名

username=`git show -s --pretty=%an`
pushtime=`git show -s --pretty=%aD`

c.获取提交人对应的手机号

mobiles=`cat /opt/DingUserList.txt | grep "${username}=" | awk -F"=" '{print $2}'`

d.发送钉钉通知

curl 'https://oapi.dingtalk.com/robot/send?
access_token=aaasssdffffffffff'\
        -H 'Content-Type: application/json; charset=utf-8'\
        -d '{"msgtype": "text",
        "text": 
        {"content": "'$JOB_NAME'提交的代码已部署\n"},
        "at": {"atMobiles": ['${mobiles}'],
        "isAtAll": false}}'

在这里插入图片描述

### 如何使用 Pytest 推送消息或通知 在自动化测试框架中,`pytest` 是一种非常流行的 Python 测试工具。为了增强用户体验并及时获取测试结果,可以配置 `pytest` 将测试结果推送到即时通讯平台(如钉钉)。以下是具体方法: #### 方法一:通过自定义钩子函数发送消息 可以通过重写 `pytest_terminal_summary` 钩子函数,在测试完成时调用外部接口向钉钉机器人发送消息。 ```python import requests def pytest_terminal_summary(terminalreporter): """ 自定义 pytest 的终端总结阶段,用于发送测试结果到钉钉。 """ passed = len([r for r in terminalreporter.stats.get('passed', [])]) failed = len([r for r in terminalreportator.stats.get('failed', [])]) skipped = len([r for r in terminalreporter.stats.get('skipped', [])]) message = { "msgtype": "text", "text": { "content": f"测试已完成\n" f"成功: {passed}\n" f"失败: {failed}\n" f"跳过: {skipped}" } } webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=your_access_token_here" headers = {'Content-Type': 'application/json'} response = requests.post(webhook_url, json=message, headers=headers) if response.status_code != 200: raise Exception(f"Failed to send dingtalk notification: {response.text}") ``` 上述代码实现了在测试结束后统计测试结果并通过钉钉 WebHook API 发送消息[^2]。 --- #### 方法二:结合多线程确保报告生成后再发送通知 如果需要先生成 Allure 报告再发送通知,则可采用多进程或多线程的方式处理任务顺序问题。 ```python from multiprocessing import Process import allure import time def generate_allure_report(): """生成 Allure 报告""" command = "allure generate ./result -o ./report --clean".split() subprocess.run(command) def send_dingtalk_notification(): """发送钉钉通知""" data = {"msgtype": "text", "text": {"content": "Allure 报告已生成"}} url = "https://oapi.dingtalk.com/robot/send?access_token=your_access_token_here" headers = {'Content-Type': 'application/json'} response = requests.post(url, json=data, headers=headers) if response.status_code != 200: raise Exception("DingTalk Notification Failed") if __name__ == "__main__": p1 = Process(target=generate_allure_report) p2 = Process(target=send_dingtalk_notification) p1.start() # 启动生成报告的任务 p1.join() # 等待报告生成结束 p2.start() # 启动发送钉钉通知的任务 ``` 此方式利用了多进程机制来保证报告生成完成后才会触发通知逻辑[^3]。 --- #### 方法三:集成 Jenkins钉钉机器人 对于更复杂的 CI/CD 场景,通常会借助持续集成工具(如 Jenkins)自动运行测试脚本并将结果推送给团队成员。可以在 Jenkins 中安装相关插件或者编写 Shell 脚本来实现这一目标。 例如,在 Jenkins 构建后的操作部分添加如下命令: ```bash pytest test_cases.py && curl -X POST https://oapi.dingtalk.com/robot/send\?access_token\=<token> \ -H 'Content-Type: application/json' \ -d '{"msgtype":"text","text":{"content":"Test Passed"}}' ``` 这种方式适合于生产环境下的大规模部署场景[^4]。 --- ### 总结 以上介绍了三种不同的解决方案供开发者选择,分别是基于钩子函数的简单实现、考虑任务依赖关系的多进程模式以及适用于流水线作业的企业级实践。每种方案都有其适用范围,请根据项目需求灵活选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值