Jenkins集成企业微信机器人实现自动化构建通知

Dylan
Dylan
发布时间:2026-10-15 | 1人浏览过
原创

本文详细介绍如何在Jenkins中集成企业微信机器人,实现构建结果的实时推送。通过配置Qy Wechat Notification插件或自定义Python脚本,结合Webhook地址与责任人参数,可精准通知项目成员。文章涵盖从机器人创建、Jenkins参数配置到Python脚本处理失败用例并发送Markdown通知的完整流程,帮助团队提升发布信息的触达效率。

若仅需将Jenkins构建结果推送至企业微信,最简方案是安装Qy Wechat Notification Plugin插件。相关网络教程丰富,此处不再赘述,具体可参考:

一、前言

近期在使用Jenkins进行自动化部署时,发现缺乏有效的即时通知机制。尽管系统支持邮件通知,但常因接收方邮箱设置或垃圾邮件过滤导致信息延迟或遗漏。鉴于公司内部统一使用企业微信,因此探索通过Jenkins调用企业微信机器人接口来实现即时通知的方案。

二、使用企业微信推送的优势

能够实时提醒项目相关人员,确保项目信息的即时更新与同步。

信息展示直观,便于团队成员快速查看关键状态。

三、配置

3.1 企业微信的配置

3.1.1 进入企业微信群

打开目标群组 -> 右键点击群标签,选择添加群机器人。 注意:目前企业微信尚未像钉钉那样提供严格的群机器人权限管控,这意味着群内任何成员均有权添加机器人。从权限管理角度看,这相对钉钉略显宽松。

3.1.2 填写机器人信息


与企业微信机器人相比,钉钉机器人的配置选项更为复杂,而企业微信的机器人配置则显得十分简洁。

3.1.3 复制Hook地址

注意:此处获取的Webhook地址将作为后续Jenkins参数配置的关键输入。

3.2 Jenkins的配置

3.2.1 安装插件

  • 进入系统管理界面
  • 进入管理插件页面
  • 在搜索框中输入插件名称(Qy Wechat Notification)

完成插件安装后返回首页

3.2.2 配置Webhook

  • 进入具体的Jenkins Job页面
  • 进入该Job的配置界面
  • 导航至构建后的操作 -> 选择企业微信通知

设置Webhook地址

3.3测试

  • 选择立即构建
  • 执行构建
  • 观察企业微信接收到的消息及推送结果

最终实现的效果如下所示:

以下是实现可配置的企业微信通知方案

1. 建立企业微信群,添加群机器人,并获取机器人的webhook地址

2. 在Jenkins中创建新项目,并按如下要求配置:

在general设置中勾选This project is parameterized,并添加两个string parameter类型参数

参数分别定义为:企业微信机器人的webhook地址、项目异常时需通知的责任人

用户默认值需填写对应的企业微信群成员用户名,以确保通知时能正确@到相关人员。若涉及多人,多个用户名之间需使用英文逗号分隔

填写构建执行命令

构建命令说明如下:


#执行测试用例 pybot.bat 用例路径
#将控制台输出导出到log.txt文件,控制台不再打印日志 >log.txt 
#如果前面一条指令执行失败才执行||后面的指令 ||
#如果前面一条指令执行成功才执行&&后面的指令 &&
#执行python脚本,发送企业微信通知,传入webhook地址,jenkins项目名称,发送通知@责任人 python ../wechatNotice.py %url% %JOB_NAME% %principal%

pybot.bat 目录名称/***.robot >log.txt || python ../wechatNotice.py %url% %JOB_NAME% %principal%

完成上述设置后,保存该项目配置

3. 本次案例采用robot框架,测试用例运行结束后,将控制台输出的日志导出至log.txt文件,内容如下

根据导出的日志内容,提取运行失败的测试用例标题


#GetCaseTitle.py
#通过控制台输出的日志查找是否有运行失败的用例,如有则获取失败用例的标题
 
class GetCaseTitle:
    def __init__(self):
        self.file = "log.txt"  #使用jenkins运行测试用例时,会将控制台输出的日志保存到log.txt文件
 
    def get_fail_case_title(self):
        fail_case_line = []
        file = open(self.file, 'r', encoding='gbk')
        for line in file:  # 查找失败的用例行
            if "FAIL" in line:
                line = str(line).replace(" ", "")
                fail_case_line.append(line)
        file.close()
 
        if len(fail_case_line)>0: #如果标记为失败的行数大于0
            fail_case_line = fail_case_line[:-1]  # 去掉最后1行的总运行结果行
 
            fail_case_title = []
            for title in fail_case_line:  # 分别获取失败case的标题
                title = title.split('|')[0]
                if title not in fail_case_line[-1]:  # 判断当前是否是最后一个用例标题,是则后面不再添加|符号
                    fail_case_title.append(title + '  |  ')
                else:
                    fail_case_title.append(title)
            fail_case_title = ''.join(fail_case_title)
            return fail_case_title
        else:
            return 0
 
if __name__ == "__main__":
    GetCaseTitle().get_fail_case_title()

若检测到存在运行失败的测试用例,则触发企业微信通知发送逻辑


#wechatNotice.py
#实现企业微信通知
 
import requests
import json
import urllib3
# import time
import sys
from GetCaseTitle import GetCaseTitle
 
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
 
class InformRobot:
    def __init__(self,url): #webhook地址
        self.url = url
        self.sess = requests.session()
 
    def markdown_robot(self, report_url, principal, failcase):
        data = {
            "msgtype": "markdown",  # 消息类型,此时固定为markdown
            "markdown": {
                "content": "提醒!线上UI测试计划运行失败 \n" +
                           f"测试报告链接:[{report_url}]({report_url}) \n" +
                           f"负责人:@{principal}  \n"
                           f"失败用例名称:{failcase}"
 
            }
        }
 
        re_post = self.sess.post(self.url, data=json.dumps(data), verify=False)
        print(re_post.content, data)
 
 
if __name__ == "__main__":
    failcase = GetCaseTitle().get_fail_case_title()  #从GetCaseTitle.py获取执行失败的用例
    if failcase:   #如存在运行失败的用例则发送企业微信通知
        url=sys.argv[1]
        projectname = sys.argv[2]
        principal = sys.argv[3]
        # execute_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        report_url = "http://172.18.1.1:8080/job/" + projectname + "/ws/log.html"
        InformRobot(url).markdown_robot(report_url, principal, failcase)
    else:
        print("测试通过")

发送通知后的实际效果如下:

至此,关于使用Python结合Jenkins发送企业微信通知的实现方案介绍完毕。如需了解更多相关Python发送企业微信通知的内容,请搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表