当前位置: 首页 > news >正文

A9. Jenkins Pipeline自动化构建,飞书通知

  • 怎么收集服务部署信息?
  • 【前置】首先Python如何操作JSON数据
  • 如何记录部署信息,什么时机统计?
  • 如何下发某一服务统计信息 ?
  • 那么怎么创建飞书通知机器人呢?
  • 编写飞书通知脚本
  • 总结

下面我们接着上一篇文章《A8. Jenkins Pipeline自动化部署过程,多模块远程服务协调实战》继续往下分析,自动化构建飞书通知脚本。下面我们来看一张图,在本次飞书通知过程中,服务通知信息数据是怎么收集的?
在这里插入图片描述

怎么收集服务部署信息?

在服务部署成功后,也就是上图中的⓵位置需要将当前服务相关镜像信息给记下来;因此服务在集群部署的时候有可能是几个到几十个甚至几百个都有可能,不可能每部署一个就通知一下,这样会导致最终客户端收到的通知会很多,并不清楚本次构建过程当中有没有真正的完成;统计部署信息一般需要考虑下面几个方面:

  • 信息记录方式:可以利用python将服务的镜像名称、版本、git提交记录和目标服务器等信息以json形式保存在本地;(这里python处理json相对较便利)
  • 统计信息记录时机:在什么时机统计信息非常重要,不能在服务还没有启动成功就统计部署成功数据;因此需要考虑在等待镜像下载完成且开始部署直到部署成功,等服务启动完成后,方才统计相关部署信息;
  • 部署信息下发方式:记录下部署信息后,需要通过scp将数据下发到部署主机;
  • 部署信息合并:我们需要每次节点数据进行合并处理,方便后面飞书通知可以一次性分发;

在收集完这些信息后即可以通过机器人进行飞书通知了,请继续往下看,逐项分析各间段的具体配置详解;

【前置】首先Python如何操作JSON数据

创建服务模块存储工具:deploy_module_store.py

import json
import os
import sys
import re
import copy

#判断文本是否json数据
def is_json(text):
    _text = copy.deepcopy(text)
    lst = ["\r", "\n", "\t", "\\s", "\\S"]
    for item in lst:
        _text = _text.replace(item, "")
    pattern = "^(\\{(.+)*\\})$|^(\\[(.+)*\\])$"
    if re.match(pattern, _text):
        return True
    else:
        return False

#这个函数将从文件中读取json字符串并返回
def get_json_string(file_name='', store_dir=''):
    file_path = os.path.join(store_dir, file_name)
    if not os.path.exists(file_path):
        print("[]")
        return "[]"
    fp = open(file_path, 'r')
    result = fp.read()
    fp.close()
    if is_json(result) == True:
        print(result)
        return result
    else:
        print("[]")
        return "[]"

#将数据以json形式保存至本地,并以file_name作为参数命名
def save_json_array(file_name='', store_dir='', data=''):
    file_path = os.path.join(store_dir, file_name)
    if not os.path.exists(file_path):
        os.system('touch %s' % file_path)
    json_string = get_json_string(

相关文章:

  • 【Github每日推荐】-- 2024 年项目汇总
  • 网工_IP地址
  • 云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
  • 蓝桥杯单片机基础部分——6、555定时器
  • 【学术投稿-第四届材料工程与应用力学国际学术会议(ICMEAAE 2025】材料工程与应用力学的探讨
  • Java中的锁
  • 六、敏捷开发工具:项目管理工具
  • 常用Webpack Loader汇总介绍
  • 【C++】结构体排序+sort(),cmp()参数写法口诀
  • 【时时三省】(C语言基础)三种基本结构和改进的流程图
  • Day01 【苍穹外卖】环境搭建与前后端联调
  • 【Java】泛型与集合篇(二)
  • cesium视频投影
  • 【核心算法篇三】《DeepSeek强化学习:Atari游戏训练框架解析》
  • 使用 Docker 部署 Apache Spark 集群教程
  • IDEA——Mac版快捷键
  • 如何使用 MTG2000 和 FreeSWITCH 通过 SIP Trunk 搭建呼叫中心
  • Jetpack Compose系列教程之(16)——Compose生命周期及副作用函数
  • 玩客云 IP查找
  • 【C语言】第四期——循环语句
  • 公示!17个新职业、42个新工种亮相
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好
  • 上海优化营商环境十大攻坚突破任务中,为何第一项是实施世行对标改革?
  • 17家城商行去年年报盘点:西安银行营收增速领跑,青岛银行净利增速领跑
  • 武契奇目前健康状况稳定,短期内将暂停日常工作
  • 河南博物院:警惕非官方网络平台 “买讲解保进馆” 等虚假信息