加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
自动化部署CD.py 3.21 KB
一键复制 编辑 原始数据 按行查看 历史
牛枫翔 提交于 2022-11-29 10:05 . add 自动化部署CD.py.
import requests, os, hashlib, tarfile
def has_new_ver(web1_ver_path, ver_url):
if os.path.exists(web1_ver_path) == False:
return True
# 文件ver.txt存在的时候
with open(web1_ver_path, mode="r") as fr:
local_ver = fr.read() # local_ver: web1服务器部署项目的版本号
# 向ver_url发请求,获取jenkins中最新的版本号
resp = requests.get(ver_url)
if local_ver != resp.text:
return True # 两个版本号不一致,需要下载
return False # 版本号已知, 不需要下载
def file_ok(web1_tar_path, jenkins_tar_md5_url):
# 计算本地文件的md5值
m = hashlib.md5()
with open(web1_tar_path, mode="rb") as fr:
while True:
data = fr.read(4096) # 4KB
if len(data) == 0: # 文件读取完毕
break
m.update(data)
resp = requests.get(jenkins_tar_md5_url) # 获取jenkins中md5文件内容
if m.hexdigest() == resp.text.strip():
return True # 文件未损坏
return False # 文件损坏
# 用于部署项目到 web1_depoly_dir 中
def deploy(web1_tar_path, web1_depoly_dir, dest):
tar = tarfile.open(web1_tar_path)
tar.extractall(path=web1_depoly_dir) # tar包解压
tar.close()
# app_dir: /var/www/deploy/myproject-1.1
app_dir=os.path.join(web1_depoly_dir,os.path.basename(web1_tar_path)[:-7])
# 创建软连接指向app_dir
if os.path.exists(dest) == True:
os.remove(dest) # 存在先删除
os.symlink(app_dir, dest) # 创建软连接
if __name__ == "__main__":
# ver_url: jenkins服务器中ver.txt文件的url地址
# web1_ver_path: web1服务器中ver.txt文件的路径
ver_url = "http://192.168.4.30/deploy/ver.txt"
web1_ver_path = "/var/www/deploy/ver.txt"
if has_new_ver(web1_ver_path, ver_url) == False:
print("没有新版本")
exit() # 退出程序
# ====================================================
# 如果有新版本需要下载
# jenkins_tar_url: jenkins中每个版本的tar包的url地址
# jenkins_tar_url_md5: jenkins中tar包md5值文件的url地址
# web1_tar_path: web1 服务器下载tar包的地址
resp = requests.get(ver_url)
jenkins_tar_url=f"http://192.168.4.30/deploy/packages/myproject-{resp.text}.tar.gz"
jenkins_tar_url_md5 = jenkins_tar_url + ".md5"
web1_tar_path = f"/var/www/download/myproject-{resp.text}.tar.gz"
# 下载tar包
with open(web1_tar_path, mode="wb") as fw:
fw.write(requests.get(jenkins_tar_url).content)
if file_ok(web1_tar_path, jenkins_tar_url_md5) == False:
print("文件已损坏")
os.remove(web1_tar_path) # 删除损坏tar包
exit() # 退出程序
# ========================部署=======================
web1_depoly_dir = "/var/www/deploy" # tar包解压路径
dest = "/var/www/html/current" # 软连接路径
deploy(web1_tar_path, web1_depoly_dir, dest) # 部署项目函数
# 更新本地版本号文件 ver.txt
if os.path.exists(web1_ver_path) == True:
os.remove(web1_ver_path)
with open(web1_ver_path, mode="w") as fw:
fw.write(resp.text) # 写入最新的版本号
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化