欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用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

ptyTrue的情况下启tomcat正常,但会在束后tomcat进程也被干

 参考资料:https://segmentfault.com/q/1010000005131935


脚本调用:

fab -f deploy.py deploy:projectname=xxx