python使用jenkins发送企业微信通知的实现
作者:朝天椒的夏天 发布时间:2022-06-06 19:40:16
如果只是想实现将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("测试通过")
发送通知的效果如下:
来源:https://blog.csdn.net/qq_15158911/article/details/117406273


猜你喜欢
- 前言很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了。这些人里包括曾经的
- 当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的
- 1 什么是prototype JavaScript中对象的prototype属性,可以返
- 什么是 Python?自20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用,Python 已然成为最受欢迎的程序设计语言之一,特
- 一、爬虫的流程开始学习爬虫,我们必须了解爬虫的流程框架。在我看来爬虫的流程大概就是三步,即不论我们爬取的是什么数据,总是可以把爬虫的流程归纳
- 因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群
- 在设计数据窗口时,在所有列的Background.Color属性中编写如下表达式: if ( IsRowNew(), 1090519039,
- 一、简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装pyt
- 我们怎么让一个 Python 程序里边实现多任务呢?实现多任务可以有多种方式,这里我们先了解使用线程的方式实现多任务。线程是实现多任务的一种
- if 结构if 结构允许程序做出选择,并根据不同的情况执行不同的操作基本用法比较运算符根据 PEP 8 标准,比较运算符两侧应该各有一个空格
- 修改vue-treeSelect的高度.vue-treeselect{ height: 28px; }
- 问题:在Jupyter Notebook中使用args传递参数时出现错误:原始代码:args = parser.parse_args()us
- Perl对文件的操作,跟其它的语言类似,无非也就是打开,读与写的操作。1. 打开文件#! c:/perl/bin/perl -w use u
- 这篇文章主要介绍了Python爬取豆瓣视频信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 1、互动流通的活跃度是社区网站的关键,产品设计者大都需要在此猛下药。facebook有利用率最高的minifeed,myspace有“好友的
- 今天是五一劳动节,可是我们劳动人民的节日哦。很多大网站都设计了特殊的logo来表示向每一位普通的劳动者致敬!下面就让我们看看这些logo吧!
- 本文实例讲述了Python自定义scrapy中间模块避免重复采集的方法。分享给大家供大家参考。具体如下:from scrapy import
- 引子之前clubot使用的pyxmpp2的默认mainloop也就是一个poll的主循环,但是clubot上线后资源占用非常厉害,使用str
- MySql通用分页存储过程过程参数p_cloumns varchar(500),p_tables varchar(100),p_where
- 判断字符串长度函数:<SCRIPT LANGUAGE="JavaScript"><!--fu