python自动化部署项目 2019-08-01

python自动化部署项目 2019-08-01_第1张图片

之前做了半年多手动部署项目的活,累的半死,还担惊受怕的怕敲错命令

如果早点想到学一下这个自动化部署该多好啊

    所以大家一定要学会高效率的工作,

    珍爱生命,远离加班,加班是效率低下的体现


python自动化部署项目 2019-08-01_第2张图片

我们使用python的paramiko库

还有一个pexpect库,对windows系统支持不好,所以这里不使用它

安装库命令:pip install paramiko --default-timeout=60

教程目录

    1、登录远程服务器

    2、检查是否有以前版本的产品运行,如果有,停止掉

    3、如果有原来的代码包删除掉

    4、上传安装包文件(手动操作通常是winscp)

    5、备份原来的产品安装目录

    6、解压安装包文件

    7、运行run.sh,启动服务

    8、浏览器登录页面验证服务是否启动

详细内容:                                        

1、登录远程服务器

#创建SSHClient实例对象ssh= paramiko.SSHClient()#请用方法,表示没有存储远程机器的公钥,允许访问    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#连接远程机器, 地址、端口、用户名和密码ssh.connect("192.168.3.15",22,"admin","123456")

2、检查是否有以前版本的产品运行,如果有,停止掉

#检查是否有以前版本的产品运行cmd ='ps -ef | grep apiteach | grep -v grep'#命令执行结果  输入、输出、错误    stdin,stdout,stderr = ssh.exec_command(cmd)#打印执行结果    output = stdout.read().decode() #判断如果有原来的进程先杀死进程IDif'进程名'inoutput :#用空格拆分parts = output.split(' ')#去掉内容为空的parts = [partforpartinpartsifpart]#拿到进程ID并杀死pid = parts[1]cmd =f'kill -9{pid}'      stdin,stdout,stderr = ssh.exec_command(cmd)  #杀死进程后需要重复进行判断,如果进程依然在,则停止程序,需要人工干预if'进程名'inoutput :print('不能停止,退出程序')sys.exit(3)else:print('停止成功')

###封装一个行程执行命令并打印日志的函数

defremoteRun(cmd):    stdin,stdout,stderr = ssh.exec_command(cmd)    output = stdout.read().decode()    errinfo = stderr.read().decode()    print(output + errinfo)returnoutput + errinfo

###调用时执行

output= remoteRun('需要执行的命令')

3、把原来的代码包删除掉

remoteRun('rm -f 包名')

4、上传安装包文件(手动操作通常是winscp)

sftp = ssh.open_sftp()sftp.put(r'本地包所在的目录***.zip','服务器包所在目录***.zip')    sftp.close()

5、备份原来的产品安装目录

remoteRun('rm -rf 删除原来的备份文件.bak ; mv 需要备份的文件夹 备份后的文件名.bak')

6、解压安装包文件

remoteRun('unzip 需要解压的压缩包.zip')

7、运行run.sh,启动服务

#给启动脚本增加可执行权限,转换为unix格式否则可能出错remoteRun('cd 启动脚本所在文件夹; chmod +x run.sh; dos2unix            run.sh; ./run.sh')# 启动等待5秒再检查进程是否存在output = remoteRun('sleep 5; ps -ef | grep 服务名 | grep -v grep')if'进程名'inoutput:print('运行成功')else:print('运行失败,停止程序')        sys.exit(3)

8、浏览器登录页面验证服务是否启动

#使用selenium进行页面检查是否正常fromseleniumimportwebdriverwebdriver.Chrome().get(f'需要检查的网址')# 等待20秒importtimetime.sleep(20)

参考视频课程地址:

https://ke.qq.com/webcourse/index.html#cid=131067&term_id=100146265&taid=1996532727545851&type=1024&vid=b1424wwp2ib

你可能感兴趣的:(python自动化部署项目 2019-08-01)