下面我们接着上一篇文章《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(