0
点赞
收藏
分享

微信扫一扫

git 集成部署的python代码部分

import os
import requests
import hashlib
import tarfile

def has_new_ver(web1_ver_path, ver_url):
# web1_ver_path 为应用服务器web1主机的当前版本文件路径
# 如果文件不存在,返回True, 提示没有新版本
if not os.path.exists(web1_ver_path):
return True
# 当web1_ver_path存在时,先获取当前应用的版本号
with open(web1_ver_path, mode="r") as fr:
local_ver = fr.read()
# 通过requests获取jenkins服务器上的最新版本号
r = requests.get(ver_url)
# 当web1上的版本号和Jenkins服务器上的版本号不相等时,返回True, 即有新的版本
if local_ver != r.text:
return True
return False

# 声明函数file_ok(), 功能:如果下载的包文件未损坏,则返回True,否则返回False
def file_ok(web1_tar_path, jenkins_tar_md5_url):
m = hashlib.md5()
with open(web1_tar_path, mode="rb") as fw:
while True:
data = fw.read(4096)
if len(data) == 0:
break
m.update(data)
# jenkins_tar_md5_url 为jenkins服务器上的压缩包的md5值文件链接地址
r = requests.get(jenkins_tar_md5_url)
if m.hexdigest() == r.text.strip():
# 相等,代表文件未损坏,返回True
return True
return False

# 声明函数deploy(), 功能:用于部署软件到 web1 服务器
def deploy(web1_tar_path, web1_deploy_dir, dest):
tar = tarfile.open(web1_tar_path) # 打开压缩包web1_tar_path
tar.extractall(path=web1_deploy_dir) # 解压到web1_deploy_dir目录下
tar.close() # 关闭tar
# 获取web1_tar_path变量中,最后一个'/',右边的内容,然后做切片,去除".tar.gz",只留下文件名
file_name = os.path.basename(web1_tar_path)[:-7]
# 将变量web1_deploy_dir和变量file_name拼接在一起
app_dir = os.path.join(web1_deploy_dir, file_name)
# 创建链接,如果软链接dest存在,删除软连接,然后为app_dir创建新的软链接
if os.path.exists(dest):
os.remove(dest)
os.symlink(app_dir, dest)

if __name__ == "__main__":
### 判断jenkins服务器上是否有新版本
# ver_url 为jenkins服务器的当前版本文件路径
# web1_ver_path 为应用服务器web1主机的当前版本文件路径
ver_url = "http://192.168.88.30/deploy/ver.txt"
web1_ver_path = "/var/www/deploy/ver.txt"
if not has_new_ver(web1_ver_path, ver_url):
print("暂无新版本!")
exit(1)
# ##############################################
# 如果服务器上有新版本,则下载新版本
# r.text 为jenkins服务器的当前版本内容
# jenkins_tar_url 为jenkins服务器上的压缩包链接地址
# web1_tar_path 为应用服务器web1主机的压缩包路径
r = requests.get(ver_url)
jenkins_tar_url = f"http://192.168.88.30/deploy/packages/myweb-{r.text}.tar.gz"
web1_tar_path = f"/var/www/download/myweb-{r.text}.tar.gz"
with open(web1_tar_path, mode="wb") as fw:
fw.write(requests.get(jenkins_tar_url).content)
# 校验下载的软件包是否损坏,如果损坏则删除 os.remove()
# jenkins_tar_md5_url 为jenkins服务器上的压缩包的md5值文件链接地址
jenkins_tar_md5_url = jenkins_tar_url + ".md5"
if not file_ok(web1_tar_path, jenkins_tar_md5_url):
print("文件已损坏")
os.remove(web1_tar_path)
exit(2)
# ##############################################
web1_deploy_dir = '/var/www/deploy'
dest = '/var/www/html/current'
deploy(web1_tar_path, web1_deploy_dir, dest)
# 更新本地的版本文件
if os.path.exists(web1_ver_path):
os.remove(web1_ver_path)
with open(web1_ver_path, mode="w") as fw:
fw.write(requests.get(ver_url).text)

运行结果:

/usr/local/bin/python3 /root/PycharmProjects/NSD211/day14/demo1.py

Process finished with exit code 0

举报

相关推荐

0 条评论