一、Jenkins构建完成后通知到飞书
1.1 查看内置变量
1、查看可用的环境变量列表
#通过可用的环境变量+python或shell实现构建后推送飞书
1.2 飞书创建机器人
1、飞书创建机器人
#先创建群组、然后加入机器人获取webhok
1.3 jenkins服务器配置环境
1、配置python所需的日志功能和飞书通知功能
#搭建python直接yum -y install python3就行
[root@jenkins ~]# mkdir /root/common #创建python通用模板目录
[root@jenkins common]# which python3
/usr/bin/python3
[root@jenkins ~]# cat .bash_profile #配置环境变量文件
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=/usr/bin/python3:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin #python的路径
HOME=/root
export PYTHONPATH=$PYTHONPATH:$HOME/common #设定python的模板文件位置。可以直接import无需写全路径
2、
loggerutil.py:
1.3.1 编写日志模板文件
# -*- coding: utf-8 -*-
"""logger工具模块
省去logging.conf配置,直接创建支持每日滚动日志文件的logger
这是单进程打日志的解决方案
用法:
import loggerutil
logger1 = loggerutil.get_logger("daily_dps_count", "stat/daily_dps_count.log") #默认格式是simple,即标准格式
logger2 = loggerutil.get_logger("daily_dps_fetch", "stat/daily_dps_fetch.log", log_format=loggerutil.LogFormat.PLAIN) #需要plain格式
"""
__author__ = "xuexiaoqiang"
import os
import logging
import logging.handlers
logger_cache = {}
LOG_DIR = os.getenv('LOG_DIR', 'log')
class LogFormat(object):
STANDARD = '%(asctime)s - %(levelname)s - %(message)s'
PLAIN = '%(message)s'
def get_logger(logger_name, logfile, log_level=logging.DEBUG, log_format=LogFormat.STANDARD):
if logger_name in logger_cache:
return logger_cache[logger_name]
full_path_logfile = os.path.join(LOG_DIR, logfile)
log_dir = os.path.dirname(full_path_logfile)
if not os.path.exists(log_dir):
os.makedirs(log_dir)
logger = logging.getLogger(logger_name)
hdlr = logging.handlers.TimedRotatingFileHandler(full_path_logfile, 'midnight')
formatter = logging.Formatter(log_format)
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(log_level)
logger_cache[logger_name] = logger
return logger
1.3.2 编写飞书通知模板文件
# -*- coding: utf-8 -*-
__author__ = "xuexiaoqiang"
import time,requests
def send_msg(mesg,error_info):
"""
飞书告警
"""
if error_info == "":
error_info = ""
mesg = mesg
date_time = time.strftime("%H:%M:%S", time.localtime())
data = {
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": "【CICD构建】 %s" % (date_time),
"content": [
[{
"tag": "text",
"text": "%s\n%s" % (mesg,error_info)
}
]
]
}
}
}
}
headers = {"Content-Type": "application/json"}
url_token = "https://open.feishu.cn/open-apis/bot/v2/hook/25cb6d11-7e85-4c3b-bd4d-f54356fe43e3"
requests.post(url_token, json=data, headers=headers)
1.4 编写构建后的脚本
# -*- coding: utf-8 -*-
"""
time:2023/07/12
author:xuexiaoqiang
emial:xuexiaoqiang0311@gmail.com
phone:110
"""
from common import notify
from common import loggerutil
import os
logger = loggerutil.get_logger("devops","cicd_construct.log")
def webhp_check():
try:
import requests
url = "http://192.168.222.137:8000/" #web服务器的地址!!!
status = requests.get(url).status_code #获取页面
if status == 200 or status == 301 or status == 302:
logger.info("cicd构建成功-->>页面状态:%s" % status)
return True
else:
logger.error("cicd构建失败-->>页面状态:%s" % status)
return False
except Exception as e:
print(e)
logger.error(e)
return False
def notify_feishu():
send_list = []
try:
"直接获取Jenkins内置的变量来发布"
JENKINS_URL = os.environ.get('JENKINS_URL')
BUILD_DISPLAY_NAME = os.environ.get('BUILD_DISPLAY_NAME')
GIT_URL = os.environ.get('GIT_URL')
GIT_BRANCH = os.environ.get('GIT_BRANCH')
JOB_NAME = os.environ.get('JOB_NAME')
git_version = os.environ.get('git_version')
deploy_env = os.environ.get('deploy_env')
print(JENKINS_URL,BUILD_DISPLAY_NAME,GIT_URL,GIT_BRANCH,JOB_NAME,git_version,deploy_env)
http_result = webhp_check()
if http_result == True or http_result == "True":
send_list.append(
{"本次构建的编号": BUILD_DISPLAY_NAME, "Jenkins的完整URL": JENKINS_URL, "构建的项目名称": JOB_NAME,
"gitlab仓库url": GIT_URL, "分支管理": GIT_BRANCH, "本次发布的git-tag":git_version,"构建方式":deploy_env,"前端网页状态": "200", "本次发布构建状态": "success"})
logger.info(send_list)
else:
send_list.append(
{"本次构建的编号": BUILD_DISPLAY_NAME, "Jenkins的完整URL": JENKINS_URL, "构建的项目名称": JOB_NAME,
"gitlab仓库url": GIT_URL, "分支管理": GIT_BRANCH, "本次发布的git-tag":git_version,"构建方式":deploy_env,"前端网页状态": "404", "本次发布构建状态": "flase"})
logger.error(send_list)
return send_list
except Exception as e:
logger.error(e)
if __name__ == '__main__':
send_list = []
result = notify_feishu()
send_info = result[0]
for itme,info in send_info.items():
result_info = "%s: %s" % (itme,info)
send_list.append(result_info)
notify.send_msg("webhp项目Jenkins构建!!!\n",error_info='\n'.join(send_list))
1.5 jenkins修改构建内容
#修改执行完发布脚本后执行python的检测脚本!!!