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 |
本文地址:https://www.chensj.net/?post=112
未标注转载均为本站远程,转载请注明文章出处: