如果只是想實(shí)現(xiàn)將jenkins的構(gòu)建結(jié)果發(fā)送到企業(yè)微信進(jìn)行通知,最簡便的方式是安裝Qy Wechat Notification Plugin插件,網(wǎng)上教程很多就不重復(fù)寫了,可參考:
一、前言
最近使用Jenkins進(jìn)行自動化部署,但是部署后,并沒有相應(yīng)的通知,雖然有郵件發(fā)送通知,但是發(fā)現(xiàn)郵件會受限于接收方的接收設(shè)置,導(dǎo)致不能及時看到相關(guān)的發(fā)布內(nèi)容。而由于公司使用的是企業(yè)微信,因此考慮Jenkins通知企業(yè)微信機(jī)器人的實(shí)現(xiàn)方式。
二、使用企業(yè)微信推送的優(yōu)勢
實(shí)時提醒項目參與人員項目信息的更新情況
便于查看
三、配置
3.1 企業(yè)微信的配置
3.1.1 進(jìn)入企業(yè)微信群
進(jìn)入某個群 -> 右擊群標(biāo)簽,添加群機(jī)器人
注意:企業(yè)微信貌似沒有像釘釘那樣設(shè)置配置群機(jī)器人權(quán)限,因此任何人都能添加機(jī)器人。相對于釘釘有點(diǎn)落后
3.1.2 填寫機(jī)器人信息
企業(yè)微信的機(jī)器人相較于釘釘機(jī)器人而言,太簡單了。
3.1.3 復(fù)制Hook地址
注意:此處的Webhook將用于Jenkins當(dāng)中的參數(shù)配置。
3.2 Jenkins的配置
3.2.1 安裝插件
- 進(jìn)入系統(tǒng)管理
- 進(jìn)入管理插件
- 搜索插件(
Qy Wechat Notification
)
安裝插件后返回首頁
3.2.2 配置Webhook
- 進(jìn)入 Jenkins Job
- 進(jìn)入 Job 配置
- 前往
構(gòu)建后的操作
-> 選擇企業(yè)微信通知
設(shè)置Webhook
3.3測試
- 選擇
立即構(gòu)建
- 構(gòu)建
- 企業(yè)微信接收消息-推送結(jié)果
實(shí)現(xiàn)的效果如下:
以下是實(shí)現(xiàn)可配置的企業(yè)微信通知
1.建企業(yè)微信群,添加群機(jī)器人,獲取機(jī)器人的webhook地址
2.jenkins中創(chuàng)建項目,配置如下:
general下This project is parameterized,添加兩個string parameter
分別為企業(yè)微信機(jī)器人的webhook和項目異常時需通知的責(zé)任人
用戶默認(rèn)值填對應(yīng)企業(yè)微信群中的用戶名,才可保證發(fā)通知時能夠@到對應(yīng)的人,多個用戶名之間用英文逗號隔開
填寫構(gòu)建執(zhí)行命令
構(gòu)建命令說明如下:
#執(zhí)行測試用例 pybot.bat 用例路徑
#將控制臺輸出導(dǎo)出到log.txt文件,控制臺不再打印日志 >log.txt
#如果前面一條指令執(zhí)行失敗才執(zhí)行||后面的指令 ||
#如果前面一條指令執(zhí)行成功才執(zhí)行后面的指令
#執(zhí)行python腳本,發(fā)送企業(yè)微信通知,傳入webhook地址,jenkins項目名稱,發(fā)送通知@責(zé)任人 python ../wechatNotice.py %url% %JOB_NAME% %principal%
pybot.bat 目錄名稱/***.robot >log.txt || python ../wechatNotice.py %url% %JOB_NAME% %principal%
以上設(shè)置好,即可保存該項目
3.本次使用的是robot框架,測試用例運(yùn)行完成后控制臺輸出的日志導(dǎo)出到log.txt文件如下
根據(jù)導(dǎo)出的日志獲取運(yùn)行失敗的測試用例標(biāo)題
#GetCaseTitle.py
#通過控制臺輸出的日志查找是否有運(yùn)行失敗的用例,如有則獲取失敗用例的標(biāo)題
class GetCaseTitle:
def __init__(self):
self.file = "log.txt" #使用jenkins運(yùn)行測試用例時,會將控制臺輸出的日志保存到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: #如果標(biāo)記為失敗的行數(shù)大于0
fail_case_line = fail_case_line[:-1] # 去掉最后1行的總運(yùn)行結(jié)果行
fail_case_title = []
for title in fail_case_line: # 分別獲取失敗case的標(biāo)題
title = title.split('|')[0]
if title not in fail_case_line[-1]: # 判斷當(dāng)前是否是最后一個用例標(biāo)題,是則后面不再添加|符號
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()
如存在運(yùn)行失敗的測試用例,則發(fā)送企業(yè)微信通知
#wechatNotice.py
#實(shí)現(xiàn)企業(yè)微信通知
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測試計劃運(yùn)行失敗 \n" +
f"測試報告鏈接:[{report_url}]({report_url}) \n" +
f"負(fù)責(zé)人:@{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獲取執(zhí)行失敗的用例
if failcase: #如存在運(yùn)行失敗的用例則發(fā)送企業(yè)微信通知
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("測試通過")
發(fā)送通知的效果如下:
到此這篇關(guān)于python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 發(fā)送企業(yè)微信通知內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 新手必看docker安裝jenkins詳細(xì)教程
- 幫你快速上手Jenkins并實(shí)現(xiàn)自動化部署
- Jenkins+Docker持續(xù)集成的實(shí)現(xiàn)
- jenkins+gitlab+nginx部署前端應(yīng)用實(shí)現(xiàn)
- 關(guān)于Jenkins + Docker + ASP.NET Core自動化部署的問題(避免踩坑)
- 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境的詳細(xì)教程
- 使用jenkins一鍵打包發(fā)布vue項目的實(shí)現(xiàn)
- 使用Jenkins Dashboard插件可視化部署的方法
- 使用jenkins部署springboot項目的方法步驟
- 關(guān)于jenkins插件下載失敗的解決方法
- Windows環(huán)境下實(shí)現(xiàn)Jenkins部署的教程詳解
- Jenkins系統(tǒng)如何進(jìn)行數(shù)據(jù)備份