使用python fabric写的一个简单的远程部署示例
程序员文章站
2022-07-12 14:19:31
...
python基础教程:
http://www.runoob.com/python/python-tutorial.html
fabric帮助文档:
http://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html
一、环境
1 安装python
python版本2.5 – 2.7
mac上安装方式
brew install python |
查看版本
python --version |
2 安装fabric
mac上安装命令
brew install fabric |
二、简单示例程序
这个程序要在多个服务器部署,可以部署多个项目,但是具体部署哪个项目,需要在参数中传入。部署多个服务器时,是依次部署,依次启动的方式,不会导致同时将服务器关闭,到时服务不可用的问题!
该脚本文件名为deploy.py
#!/usr/bin/env python # encoding:utf-8 from fabric.api import * import time TOMCAT_HOME = "/xxxx/apache-tomcat-8.0.29" WAR_DIR = "/home/jenkins/.jenkins/xxxx/target/" #要远程部署的几个服务器 servers = [ 'myserver1', 'myserver2' ] #这几个服务器有统一的用户名访问 env.user= "server_username " #服务器用户密码 env.password = "server_password" def deploy(projectname): for server in servers: print("正在部署服务器:" + server + " 项目名:" + projectname) with settings(host_string = server): deploy_one_server(projectname) print("部署服务器 "+ server +" 项目" + projectname + " 完成!") print "休息60秒" time.sleep(60) #部署一个服务器 def deploy_one_server(projectname): warfilename = projectname + ".war" #1,上传文件到tomcat根目录 print("1,上传文件到tomcat根目录") with lcd(WAR_DIR): with cd(TOMCAT_HOME): put(warfilename,warfilename) run("ls") #2,关闭服务器 print "2,关闭服务器" close_tomcat() #3,删除原有的部署文件 print "3,删除原有的部署文件" with cd(TOMCAT_HOME + "/webapps/"): run("rm -rf " + projectname + "/") run("rm -rfv " + warfilename) #4,将已上传的文件放到tomcat项目目录 print "4,将已上传的文件放到tomcat项目目录" with cd(TOMCAT_HOME): run("mv " + warfilename + " ./webapps/") #5,启动服务器 print "5,启动服务器" run(TOMCAT_HOME +"/bin/startup.sh",pty=False) #关闭tomcat服务器 def close_tomcat(): #kill可能会因为没有tomcat线程,导致关闭命令失败,所以需要在产生异常时继续执行 with settings( hide('warnings', 'running', 'stdout', 'stderr'), warn_only=True ): run("ps -ef |grep tomcat |grep -v grep |awk -F \" \" '{print $2}' | xargs kill -9")
注意:最后启动tomcat时,run方法要使用pty=False
pty在True的情况下启动tomcat正常,但会在结束后导致tomcat进程也被干掉 |
参考资料:https://segmentfault.com/q/1010000005131935
脚本调用:
fab -f deploy.py deploy:projectname=xxx |