1、执行命令
一键部署历史版本执行命令为:
python ftp_tools.py 20240125
ftp_tools.py脚本内容为:
(1)、需要接收一个日期的格式参数,以便从 ftp 上面去获取相应的历史版本部署包,获取到历史部署包后会在本地解压并且解决下载的原始压缩包
(2)、最后再调用一个sh的 shell 脚本去执行停服务,部署,启动服务
[root@111]# more ftp_tools.py
#coding:utf8
from ftplib import FTP
import sys
import os
import shutil
import re
import time
import datetime
ftp_host = "10.10.1.11"
ftp_user = "admin"
ftp_passwd = "test111"
ftppath="/deploy/fc/" #ftp上的目录地址
pathdir = r"D:\historyData"
pwdpath = os.path.abspath(".") #下载到当前目录地址
commands = sys.argv
def _login_ftp():
try:
conn = FTP()
conn.connect(host=ftp_host,timeout=15)
conn.login(ftp_user,ftp_passwd)
conn.encoding = "utf-8"
except:
sys.exit("创建ftp连接失败!请检查ftp登录信息是否正常!")
else:
return conn
def downloadfile(ftp, remotepath, localpath):
'''
remotepath: ftp上面的目录地址
localpath: 本地目录地址
'''
filename = os.path.split(remotepath)[-1]#将path分割成目录和文件名的二元组返回
print("开始下载文件%s到本地%s"%(filename,localpath))
localpath = os.path.join(localpath,filename)
localfile=localpath.split(".")[0]
if(os.path.exists(localfile)):
print("文件存在")
shutil.rmtree(localfile, True)
time.sleep(5)
else:
print("本地此文件不存在")
fp = open(localpath,'wb')
print("正在下载中...")
ftp.retrbinary('RETR ' + remotepath, fp.write)
ftp.set_debuglevel(0)
fp.close()
print("下载结束!")
def uploadfile(ftp, remotepath, localfilepath):
'''
remotepath: ftp上面的目录地址
localfilepath: 本地文件目录地址
'''
filename = os.path.split(localfilepath)[-1]
print("开始上传文件%s到ftp%s"%(filename,remotepath))
remotepath = "/".join([remotepath,filename])
buf_size = 1024*1024*15
fp = open(localfilepath, 'rb')
ftp.storbinary('STOR '+ remotepath , fp, buf_size)
ftp.set_debuglevel(0)
fp.close()
print("上传结束!")
def unpack_archive(zippathfile,unzippathfile):
'''
:param zippathfile: 压缩文件路径
:param unzippathfile: 解压文件存放路径
:return: 解压完毕后删除压缩文件包
'''
try:
filename = os.path.splitext(os.path.split(zippathfile)[-1])[0]
print("开始解压文件:",filename)
shutil.unpack_archive(zippathfile,os.path.join(unzippathfile,filename))
print("删除原压缩文件",filename)
os.remove(zippathfile)
except Exception as e:
sys.exit(e.__str__())
return True
def upload(filename):
print("上传开始")
filepath = os.path.join(pwdpath,filename)
print("本地配置文件路径为:",filepath)
if os.path.exists(filepath):
uploadfile(_login_ftp(),ftppath,filepath)
#import time
#time.sleep(3)
#os.remove(filepath)
#print("删除本地原文件完成")
else:
sys.exit("请求参数错误,未发现相关文件!")
def download(filename):
global ftppath
ftppath += filename
downloadfile(_login_ftp(),ftppath,pwdpath)
unpack_archive(os.path.join(pwdpath,filename),pwdpath)
ftppath="/deploy/fc/"
if __name__ == '__main__':
now=sys.argv[1]
files=[str(now)+"-FO.zip",str(now)+"-FOStorage.zip",str(now)+"-FOSentinel.zip"]
print(files)
for file in files:
print(file)
download(file)
import subprocess
subprocess.call('sh deploy_history_version.sh %s'%now, shell=True)
以下是python脚本执行部署时调用的 shell 脚本代码:
[root@111]# more deploy_history_version.sh
#/bin/sh
echo $1
sh /opt/FO/allstop.sh
\cp -rf /data/deploy/history_package_dir/$1-FOStorage/FOStorage/bin/FOStorage.out /opt/FO/FOStorage/bin
\cp -rf /data/deploy/history_package_dir/$1-FO/Automatic/* /opt/FO/Automatic
rm -rf /opt/FO/ETL/lib/*
\cp -rf /data/deploy/history_package_dir/$1-FO/ETL/* /opt/FO/ETL
\cp -rf /data/deploy/history_package_dir/$1-FO/FODBMerge/* /opt/FO/FODB
\cp -rf /data/deploy/history_package_dir/$1-FO/FOHost/* /opt/FO/FOHost
\cp -rf /data/deploy/history_package_dir/$1-FO/Monitor/* /opt/FO/Monitor
\cp -rf /data/deploy/history_package_dir/$1-FO/Server/* /opt/FO/OServer
\cp -rf /data/deploy/history_package_dir/$1-FO/ScheduleTask/* /opt/FO/Schedule
\cp -rf /data/deploy/history_package_dir/$1-FO/ScheduleTimer/* /opt/FO/ScheduleTimer
\cp -rf /data/deploy/history_package_dir/$1-FO/Web/* /opt/FO/Web
\cp -rf /data/deploy/history_package_dir/$1-FO/XService/* /opt/FO/XService
sh /opt/FO/allstart.sh
rm -rf /data/deploy/history_package_dir/$1-*
今天分享的内容主要为代码的分享,进步与成长可以使人获得长期的快乐,希望我们一起快乐呀~
如果你觉得文章不错的话,分享、收藏,在看,关注将会是对我的最大支持,也是我持续更新的最大动力