目录
一、使用场景
在Jnekins执行构建中、后自动触发飞书机器人通知
二、实现方式
(一)自由项目
方法一:在jenkins job 中shell命令运行某些脚本
例如:python脚本
# -*- encoding: utf-8 -*-
"""
@Author : liyinchi
@File : feishu.py
@Time : 2022/4/30
@Remark :飞书通知
"""
import sys
import requests
import datetime
#定义python系统变量
JOB_URL = sys.argv[1]
JOB_NAME = sys.argv[2]
# 获取当前系统时间
current_time = datetime.datetime.now()
# 飞书机器人的webhook地址
url = 'https://open.feishu.cn/open-apis/bot/v2/hook/xxxx'
method = 'post'
headers = {'Content-Type':'application/json'}
data = {
"msg_type": "interactive",
"card": {
"config": {
"wide_screen_mode": True,
"enable_forward": True
},
"elements": [{
"tag": "div",
"text": {
"content": f"【测试完毕】{current_time}", # 这是卡片的内容,也可以添加其他的内容:比如构建分支,构建编号等
"tag": "lark_md"
}
}, {
"actions": [{
"tag": "button",
"text": {
"content": "查看测试报告", # 这是卡片的按钮,点击可以跳转到url指向的allure路径
"tag": "lark_md"
},
"url": f"{JOB_URL}/allure/", # JOB_URL 调用python定义的变量,该url是服务器下的allure路径
"type": "default",
"value": {}
}],
"tag": "action"
}],
"header": {
"title": {
"content": JOB_NAME + "构建报告", # JOB_NAME 调用python定义的变量,这是卡片的标题
"tag": "plain_text"
}
}
}
}
res= requests.request(method=method,url=url,headers=headers,json=data)
print(res)
print(res.json())
jenkins job shell
python feishu.py ${JENKINS_URL} "jenkins-${JOB_NAME}-${BUILD_NUMBER}"
python feisuh.py $JENKINS_URL $JOB_NAME
jenkins可用的环境变量列表
2.方法二:安装 Post build task 插件
系统设置》插件管理
Jenkins job中 》增加构建后操作步骤》Post build task
在插件中写入脚本,内容如下:
#!/bin/bash
JOB_URL="${JENKINS_URL}job/${JOB_NAME}"
getBuildState(){
buildNr=$1
curl -u #jenkins账号密码信息 ${JOB_URL}/${buildNr}/api/json |grep -Po '"result":\s*"\K\w+'
}
state=$(getBuildState ${BUILD_NUMBER} )
string1=$BUILD_DISPLAY_NAME
string2=$JOB_BASE_NAME
nowTime=$(date "+%Y-%m-%d %H:%M:%S")
echo ${state}
if [[ "x${state}" == "xSUCCESS" ]] ; then
curl -X POST -H "Content-Type: application/json" \
-d '{"msg_type":"post","content": {"post": {"zh_cn": {"title": "发布结果通知","content": [[{"tag": "text","text": "'"应用:本群通知专用\n系统:$string2\n构建:$string1\n状态:成功\n日期:$nowTime"'"}]]} } }}' \
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx
else
curl -X POST -H "Content-Type: application/json" \
-d '{"msg_type":"text","content":{"text":"'"应用:本群通知专用\n系统:$string2\n构建:$string1\n状态:失败\n日期:$nowTime"'"}}' \
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx
fi
效果:
(二)pipeline项目
1.pipeline脚本
pipeline {
agent any
stages {
stage('feishu') {
steps {
echo 'run'
sh label: 'python install', script: 'pip3 install requests'
sh label: 'pwd', script: 'pwd'
sh label: 'python3', script: 'python3 feishu.py ${JENKINS_URL} ${JOB_NAME}-${BUILD_NUMBER}'
}
}
}
}
三、常见问题:
1.找不到对应环境
问题描述:linux命令可识别python3环境,但在jenkins job 中执行python识别不到python
原因:jenkins全局环境配置需要在全局工具配置中设置
解决办法:
①找到python3所在路径,执行脚本前写入绝对路径
jenkins job shell命令中写入/usr/bin/python3 feishu.py
2.jenkins 环境变量配置
系统配置>系统配置>环境变量配置
3.修改jenkins时区修改为中国(上海时区)
系统管理》脚本命令行
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
4.定时SCM
MINUTE HOUR DOM MONTH DOW
每隔5分钟构建一次
H/5 * * * *
每两小时构建一次
H H/2 * * *
每天中午12点定时构建一次
H 12 * * *
每天下午18点定时构建一次
H 18 * * *
在每个小时的前半个小时内的每10分钟
H(0-29)/10 * * * *
每两小时45分钟,从上午9:45开始,每天下午3:45结束
45 9-16/2 * * 1-5
每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5
5.pipeline全局变量
http://110.xxx.xxx.59:8000/job/pipeline-lark/pipeline-syntax/globals
6.pipeline语法
参考:
本文含有隐藏内容,请 开通VIP 后查看