目录
在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 {
- 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}'
- }
- }
- }
- }

问题描述:linux命令可识别python3环境,但在jenkins job 中执行python识别不到python

原因:jenkins全局环境配置需要在全局工具配置中设置

解决办法:
①找到python3所在路径,执行脚本前写入绝对路径

jenkins job shell命令中写入/usr/bin/python3 feishu.py


系统配置>系统配置>环境变量配置



系统管理》脚本命令行

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

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

http://110.xxx.xxx.59:8000/job/pipeline-lark/pipeline-syntax/globals
参考: