- 安装Jenkins
2.新建任务
- 丢弃旧的构建
- 配置GIT
在该界面添加Git拉取代码的账号密码
- 构建触发器
- 构建
- 构建后操作
构建如果失败,执行代码将失败信息发到飞书群
import time, hmac, base64, hashlib, datetime, requests, json
def createFeiShuSign():
secret = 'xxxx'
timestamp = int(time.time()) # 获取当前时间戳,单位秒
secretBefore = ('%s\n%s' % (timestamp, secret)).encode('utf-8') # 将值转换为byte类型
msg = ""
msgEncode = msg.encode('utf-8')
hsha256 = hmac.new(secretBefore, msgEncode, digestmod=hashlib.sha256).digest() # 用hashlib.sha256进行计算,得出HmacSHA256
sign = base64.b64encode(hsha256).decode() # 先Base64,再decode去掉byte类型,得到sign值
return {"timestamp": timestamp, "sign": sign}
# 获取最近一次构建版本号
last_build_url = "http://192.168.1.1:8888/job/sos_api_test/lastBuild/buildNumber"
build_number_rep = requests.get(url=last_build_url, auth=('Admin', 'xxxxxx'))
build_number = 0
if build_number_rep.status_code == 200:
build_number = int(build_number_rep.text) - 1
print(build_number)
build_time = (datetime.datetime.now() - datetime.timedelta(minutes=3)).strftime("%Y-%m-%d %H:%M") # 3分钟前构建的
# 获取指定构建号的构建状态
if build_number != 0:
build_status_url = "http://192.168.1.1:8888/job/sos_api_test/{}/api/xml".format(build_number)
build_allure_url = "http://192.168.1.1:8888/job/sos_api_test/{}/allure/".format(build_number)
build_result = requests.get(url=build_status_url, auth=('Admin', 'xxxxx'))
is_before_fail = "<result>FAILURE</result>" in build_result.text
# 上一次构建失败,发送恢复通知
if is_before_fail:
# 接口自动化测试群-机器人地址
robot_url = 'https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxx'
text = '项目在{}执行编号{}构建失败'.format(build_time, build_number)
href = "{}".format(build_allure_url)
payload_message = {
"timestamp": createFeiShuSign().get('timestamp'),
"sign": createFeiShuSign().get('sign'), # 获取函数的值,并get到具体值
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": "【sos_api_test自动化】项目运行有失败用例",
"content": [
[
{
"tag": "text",
"text": text
},
{
"tag": "a",
"text": ":具体接口报错详情可查看报告",
"href": href
},
]
]
}
}
}
}
# 发送群通知
response = requests.request("POST", robot_url, headers={'Content-Type': 'application/json'}, data=json.dumps(payload_message))