python使用jenkins发送企业微信通知的实现

 更新时间:2021年06月01日 08:27:39   作者:朝天椒的夏天  
公司使用的是企业微信,因此考虑Jenkins通知企业微信机器人的实现方式,本文主要介绍了python使用jenkins发送企业微信通知的实现,感兴趣的可以了解一下

如果只是想实现将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实现简单的贪吃蛇游戏

    python实现简单的贪吃蛇游戏

    这篇文章主要为大家详细介绍了python实现简单的贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • python基于Pandas读写MySQL数据库

    python基于Pandas读写MySQL数据库

    这篇文章主要介绍了python基于Pandas读写MySQL数据库,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • OpenCV利用python来实现图像的直方图均衡化

    OpenCV利用python来实现图像的直方图均衡化

    这篇文章主要介绍了OpenCV利用python来实现图像的直方图均衡化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Pytorch从0实现Transformer的实践

    Pytorch从0实现Transformer的实践

    本文主要介绍了Pytorch从0实现Transformer的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Pandas实现在线文件和剪贴板数据读取详解

    Pandas实现在线文件和剪贴板数据读取详解

    这篇文章主要为大家介绍的是Pandas两种少用的读取文件方式:读取在线文件的数据和读取剪贴板的数据,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-06-06
  • Python实现生成指定大小文件的示例详解

    Python实现生成指定大小文件的示例详解

    这篇文章主要为大家详细介绍了Python如何实现生成指定大小文件,例如txt/图片/视频/csv等,文中的示例代码讲解详细,需要的可以参考下
    2023-08-08
  • 解决Python一行输出不显示的问题

    解决Python一行输出不显示的问题

    今天小编就为大家分享一篇解决Python一行输出不显示的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 解读pandas.DataFrame.corrwith

    解读pandas.DataFrame.corrwith

    这篇文章主要介绍了解读pandas.DataFrame.corrwith,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python初学时购物车程序练习实例(推荐)

    Python初学时购物车程序练习实例(推荐)

    下面小编就为大家带来一篇Python初学时购物车程序练习实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • python配置虚拟环境步骤

    python配置虚拟环境步骤

    大家好,本篇文章主要讲的是python配置虚拟环境步骤,感兴趣的同学赶快来看一看,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论