加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
web.py 3.28 KB
一键复制 编辑 原始数据 按行查看 历史
牛枫翔 提交于 2022-08-24 10:07 . update web.py.
import os, requests, hashlib, tarfile
def has_new_version(web1_ver_path, ver_url):
# 如果文件不存在,需要下载新tar包
if os.path.exists(web1_ver_path) == False:
return True
# 当web1_ver_path存在时,需要两个版本号是否一致
with open(web1_ver_path, mode="r") as fr:
local_ver = fr.read() # local_ver: 保存本地版本号
resp = requests.get(ver_url)
if resp.text != local_ver:
return True
return False
# web1_tar_path:下载tar存放到web1服务器中的路径
# jenkins_tar_md5_url: 正确md5的url路径
def file_ok(web1_tar_path, jenkins_tar_md5_url):
m = hashlib.md5() # 计算本地tar的md5值
with open(web1_tar_path, mode="rb") as fr:
while True:
data = fr.read(4096)
if len(data) == 0: # 文件读取完毕
break
m.update(data) #批量更新md5值
resp = requests.get(jenkins_tar_md5_url)
if resp.text.strip() == m.hexdigest():
return True # 文件未损坏
return False # 文件损坏
# web1_deploy_dir:/var/www/deploy
def deploy(web1_tar_path, web1_deploy_dir, dest):
tar = tarfile.open(web1_tar_path)
tar.extractall(path=web1_deploy_dir)
tar.close()
# fname: myproject-1.0
fname = os.path.basename(web1_tar_path)[:-7]
# app_dir: /var/www/deploy/myproject-1.0
# 软连接存在则删除,不存在则创建
app_dir = os.path.join(web1_deploy_dir, fname)
if os.path.exists(dest):
os.remove(dest)
os.symlink(app_dir, dest)
# 已知: /var/www/download/myproject-1.0.tar.gz
# /var/www/deploy
# 目标:/var/www/deploy/myproject-1.0
# 判断jenkins服务器是否有新版本
# ver_url: jenkins服务器中保存的最新版本号的url地址
# web1_ver_path: web1服务器当前版本号的存放路径
ver_url = "http://192.168.88.30/deploy/ver.txt"
web1_ver_path = "/var/www/deploy/ver.txt"
if has_new_version(web1_ver_path, ver_url) == False:
print("没有新版本~")
exit() # 退出程序
# ==================================================
# 如果有新版本,需要下载文件
# jenkins_tar_url: 从jenkins服务器中下载tar的url地址
# web1_tar_path:下载tar存放到web1服务器中的路径
resp = requests.get(ver_url)
jenkins_tar_url = f"http://192.168.88.30/deploy/packages/myproject-{resp.text}.tar.gz"
web1_tar_path = f"/var/www/download/myproject-{resp.text}.tar.gz"
# 下载tar包到本地
with open(web1_tar_path, mode="wb") as fw:
resp = requests.get(jenkins_tar_url)
fw.write(resp.content)
# 校验文件的完整性
jenkins_tar_md5_url = jenkins_tar_url + ".md5"
# =====================================
# 校验文件完整性
if file_ok(web1_tar_path,jenkins_tar_md5_url)==False:
print("文件已损坏!!!")
os.remove(web1_tar_path) # 删除tar包
exit() # 退出程序
# =============部署====================
# dest: 软连接路径
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)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化