前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 基于 FTP 历史版本一键部署

Python 基于 FTP 历史版本一键部署

作者头像
Wu_Candy
发布2024-03-12 17:35:54
560
发布2024-03-12 17:35:54
举报
文章被收录于专栏:无量测试之道无量测试之道

1、执行命令

一键部署历史版本执行命令为:

代码语言:javascript
复制
python ftp_tools.py 20240125
2、核心 Python 代码

ftp_tools.py脚本内容为:

(1)、需要接收一个日期的格式参数,以便从 ftp 上面去获取相应的历史版本部署包,获取到历史部署包后会在本地解压并且解决下载的原始压缩包

(2)、最后再调用一个sh的 shell 脚本去执行停服务,部署,启动服务

[root@111]# more ftp_tools.py

代码语言:javascript
复制
#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)
3、核心 Shell 代码

以下是python脚本执行部署时调用的 shell 脚本代码:

[root@111]# more deploy_history_version.sh

代码语言:javascript
复制
#/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-*

今天分享的内容主要为代码的分享,进步与成长可以使人获得长期的快乐,希望我们一起快乐呀~

如果你觉得文章不错的话,分享、收藏,在看,关注将会是对我的最大支持,也是我持续更新的最大动力

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、核心 Python 代码
  • 3、核心 Shell 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档