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 |