当前位置: 首页 > news >正文

批量跑脚本后自定义消息内容发送至钉钉--自定义发送到钉钉的消息内容


import requests
import json
import os
import time
import sys


def send_dingtalk_message(webhook_url, success_count, fail_count, fail_module, job_name, build_number, build_user, build_url):
"""
发送Markdown格式的钉钉通知消息,支持更丰富的排版样式
"""
# 获取当前时间
end_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 计算总脚本数和成功率
total_scripts = success_count + fail_count
success_rate = f"{(success_count / total_scripts * 100):.1f}%" if total_scripts > 0 else "0%"

# 根据结果设置状态标识和颜色
if fail_count == 0:
status_text = "构建成功"
status_color = "green" # 绿色表示成功
status_emoji = "✅"
else:
status_text = "构建失败"
status_color = "red" # 红色表示失败
status_emoji = "❌"

# 构造Markdown内容(支持标题、加粗、颜色、列表等格式)
markdown_content = f"""
test

### {status_emoji} Jenkins构建通知 [{job_name}]

> **状态**:<font color="{status_color}">{status_text}</font>
> **构建编号**:#{build_number}

| 信息类型 | 详情 |
|----------------|--------------------------|
| 📌 项目名称 | {job_name} |
| 👤 构建人员 | {build_user} |
| ⏰ 结束时间 | {end_time} |
| 🖥 构建环境 | 老版本-预发布环境 |
| 🔗 报告链接 | [查看详细日志]({build_url})|

#### 构建结果统计
- 📈 总脚本数:{total_scripts} 个
- ✅ 成功脚本:{success_count} 个
- ❌ 失败脚本:{fail_count} 个
- ❌ 失败脚本:{fail_module}
- 📊 成功率:<font color="blue">{success_rate}</font>
""".strip() # 去除首尾空行

# 构造Markdown类型消息
message = {
"msgtype": "markdown",
"markdown": {
"title": f"Jenkins构建通知 - {job_name} #{build_number}", # 消息标题(通知栏显示)
"text": markdown_content
},
"at": {
"isAtAll": False # 不@所有人,如需@特定人可添加"atMobiles": ["手机号"]
}
}

headers = {"Content-Type": "application/json"}
# VPN代理
proxies = {"https": None}

try:
response = requests.post(
webhook_url,
headers=headers,
data=json.dumps(message),
proxies=proxies,
timeout=10
)
'''response.raise_for_status() 是一个 “主动报错” 的方法,用于显式检查 HTTP 请求是否成功,
避免错误的响应被静默处理。在需要确保请求成功的场景(如接口调用、数据爬取)中非常实用'''
response.raise_for_status()

result = response.json()
if result.get("errcode") == 0:
print("钉钉通知发送成功")
else:
print(f"钉钉通知发送失败: {result.get('errmsg')}")
return result

except requests.exceptions.RequestException as e:
print(f"请求异常: {e}")
return None


if __name__ == "__main__":
# 从环境变量获取构建信息
job_name = os.getenv("JOB_NAME", "未知项目")
build_number = os.getenv("BUILD_NUMBER", "0")
build_user = os.getenv("BUILD_USER", "debug")
# build_url = os.getenv("BUILD_URL", "#)
build_url = f'http://192.168.3.165:8080/jenkins/job/ceshi//{build_number}/console'

# jenkins-test钉钉内部群通知-0001
webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=9ac34e44f528d56d6cbd7d4a50ac6a25e8264750bd7401a3543a43c816c1816f"

# 初始化计数
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from case.game_scrip import success_count, fail_count, fail_files
success_count = success_count
fail_count = fail_count
fail_module = fail_files

send_dingtalk_message(webhook_url, success_count, fail_count, fail_module, job_name, build_number, build_user, build_url)
http://www.zskr.cn/news/28267.html

相关文章:

  • 088_尚硅谷_switch使用细节(2)
  • 2025 年化工塑料桶生产厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 国产化Excel开发组件Spire.XLS教程:在Python中将Pandas DataFrame导出到Excel的详细教程
  • Gitee:中国开发者生态的数字化转型引擎
  • Windows 11 24H2 堆栈防护:从功能解析到实战配置
  • 2025年陕西省基本农田调整技术服务品牌排名前十权威解析
  • 2025年陕西省基本农田调整技术服务公司排名前十权威解析
  • 2025.10.23 VP Record
  • 2025年高压电缆品牌哪家好:鑫佰亿线缆权威推荐与选择指南
  • 2025外贸独立站推广机构TOP5推荐:从建站到获客的实用选择
  • 2025年西安城北学区房购买终极指南:十大热门项目深度评测与排名
  • [LangChain] 06. Message消息对象
  • 硬件编写_基于STM32单片机的汽车急控优秀的系统
  • 升级windows 11 25h2的步骤(xjl456852原创)
  • 【STM32H743IIT6 系列】通过 LTDC接口驱动的 TFTLCD(RGB屏)显示
  • 10.22 —— 2024icpc沈阳D,E,B,M
  • AGV 系统的内部物流与装配智能化方案设计:应用场景与核心优势详解 - 实践
  • vue项目浏览器内存不断增加
  • AI 辅助开发工具
  • 网安人必看!2025年最硬核的20+变现路径,学生党也能月入4位数。 - 详解
  • SightAI 企业级实战:构建高可用、低成本的 AI 应用架构 - sight
  • 应用安全 --- 安卓加固 之 软件安装白名单
  • 零知IDE——基于STM32F407VET6和雨滴传感器的多界面TFT降雨监测显示系统 - 详解
  • 深入解析:本机网速会影响到云手机的运行吗
  • 交互的脉络:小程序事件平台详解
  • 基于MATLAB的Copula函数实现
  • 2025年国产助听器品牌推荐榜:聚焦专业适配,杭州爱听科技引领国产助听新体验​
  • 2025 年PPR家装管厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 2025 年废气处理设备厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 2025 年连接器厂家最新推荐榜单:聚焦电子 / Type-C / 板对板等品类,精选领军企业助力下游企业精准选型