四、gitlab+Jenkins+nginx实现发布后推送飞书通知

文章介绍了如何在Jenkins构建完成后使用Python脚本将通知发送到飞书。首先查看Jenkins内置变量,然后在飞书创建机器人并获取webhook。接着配置Jenkins服务器的Python环境,包括日志模块和飞书通知功能。通过编写`loggerutil.py`和飞书通知模板文件实现日志记录和消息推送。最后,展示了构建后的检查脚本,该脚本会检查web服务器状态并在成功或失败时通过飞书发送相应信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Jenkins构建完成后通知到飞书

1.1 查看内置变量

1、查看可用的环境变量列表
#通过可用的环境变量+python或shell实现构建后推送飞书

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TsFAkWCl-1689761218108)(E:\教学资料\※笔记※\复习\assets\image-20230712164244660.png)]

1.2 飞书创建机器人

1、飞书创建机器人
#先创建群组、然后加入机器人获取webhok

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GuaiYkQK-1689761218109)(E:\教学资料\※笔记※\复习\assets\image-20230712164619583.png)]

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的检测脚本!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MX1uyuHL-1689761218110)(E:\教学资料\※笔记※\复习\assets\image-20230712184647795.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQdx7DB8-1689761218110)(E:\教学资料\※笔记※\复习\assets\image-20230712184551735.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维神经科主任

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值