首页 > 代码库 > python fabric模块 生产环境dubbo代码包发布管理完整实例
python fabric模块 生产环境dubbo代码包发布管理完整实例
#!/usr/bin/env python
import os
import time
import fabric
from fabric.api import *
from fabric.context_managers import *
from fabric.colors import *
from fabric.contrib.console import confirm
env.hosts=[‘XXXX.XXXX.XXXX.XXXX‘]
env.user=‘user‘
env.password=‘xxxxxxxx‘
env.port=‘22‘
env.remote_deploy_dir="/app/dubbo/server"
env.remote_backup_dir="/data/backup/java"
env.remote_upload_dir="/home/www/upload"
env.local_dir="/app/webapps/torch/dubbo"
env.local_upload_dir="/home/www/upload"
env.deploy_date=time.strftime("%Y%m%d%H%M")
env.por_name=prompt("please input your project name:")
@task
def backup_remote():
env.por_name = prompt("please input your project name:")
print red("start backup remote project" + "env.pro_name")
rem = run("cd %s/%s" % (env.remote_deploy_dir,env.por_name))
if rem.failed and not confirm("cd deployfailed,continue?"):
abort(‘Abort‘)
#with settings(warn_only = True):
with cd("%s/%s" % (env.remote_deploy_dir,env.por_name)):
run("tar -czvf %s%s.tar.gz lib" % (env.por_name,env.deploy_date))
time.sleep(5)
run("mv *.tar.gz %s" % (env.remote_backup_dir))
print green("backup remote project success!")
@task
def tar_source():
print red("start tar source package......")
with lcd("%s/%s" % (env.local_dir,env.por_name)):
local("tar -xvf %s-assembly.tar.gz" % (env.por_name))
time.sleep(5)
with lcd("%s/%s/%s" % (env.local_dir,env.por_name,env.por_name)):
local("tar -czvf %s.tar.gz lib" % (env.por_name))
time.sleep(5)
local("mv %s.tar.gz %s" % (env.por_name,env.local_upload_dir))
print green("tar source packge success!")
@task
def put_packge():
print red ("start put packge......")
with settings(warn_only = True):
result = put(env.local_upload_dir +"/"+ env.por_name +".tar.gz",env.remote_upload_dir)
if result.failed and not confirm("put file failed,confitnue [Y/N]?"):
abort("Abort file put task!")
local("rm -rf %s/%s.tar.gz" %(env.local_upload_dir,env.por_name))
@task
def check_packge():
print red ("start check packge......")
with settings(warn_only = True):
lmd5 = local("md5sum %s/%s.tar.gz" % (env.local_upload_dir,env.por_name), capture=True).split(‘ ‘)[0]
print ("lmd5 is %s" %(lmd5))
rmd5 = run("md5sum %s/%s.tar.gz" % (env.remote_upload_dir, env.por_name)).split(‘ ‘)[0]
print ("rmd5 is %s" %(rmd5))
if lmd5 == rmd5:
local("rm -rf %s/%s.tar.gz " %(env.local_upload_dir,env.por_name))
print "OK"
else:
print "ERROR"
run("rm -rf %s/%s.tar.gz" %(env.remote_upload_dir, env.por_name))
print yellow("put packge failed......")
@task
def deploy_packge():
print red("start deploy packge ......")
#with settings(warn_only = True):
#run("mv %s/%s.tar.gz %s/%s" %(env.remote_upload_dir,env.por_name,env.remote_deploy_dir,env.por_name))
#with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):
#run("./bin/stop.sh")
#time.sleep(5)
with settings(warn_only = True):
env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))
#project stop, start project
if len(env.remote_pro_pid)==0:
print red("env.por_name is stop,start deploy packge......")
run("mv %s/%s.tar.gz %s/%s" %(env.remote_upload_dir,env.por_name,env.remote_deploy_dir,env.por_name))
with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):
run("rm -rf lib && tar -xvf %s.tar.gz" %(env.por_name))
time.sleep(3)
run("./bin/start.sh")
time.sleep(5)
env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))
if len(env.remote_pro_pid)!=0:
print green("%s packge deploy is sucessfull..." %(env.por_name))
run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))
else:
print yellow("%s packge deploy faild" %(env.por_name))
run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))
#project start,stop project and start project
else:
with settings(warn_only = True):
with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):
run("./bin/stop.sh")
time.sleep(5)
env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))
if len(env.remote_pro_pid)==0:
print("env.por_name is stop,start deploy packge......")
run("mv %s/%s.tar.gz %s/%s" %(env.remote_upload_dir,env.por_name,env.remote_deploy_dir,env.por_name))
with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):
run("rm -rf lib && tar -xvf %s.tar.gz" %(env.por_name))
time.sleep(3)
run("./bin/start.sh")
time.sleep(5)
env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))
if len(env.remote_pro_pid)!=0:
print green("%s packge deploy is sucessfull..." %(env.por_name))
run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))
else:
print yellow("%s packge deploy faild" %(env.por_name))
run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))
else:
run("kill -9 %d" % int(env.remote_pro_pid))
print("env.por_name is stop,start deploy packge......")
run("mv %s/%s.tar.gz %s/%s" % (env.remote_upload_dir, env.por_name, env.remote_deploy_dir, env.por_name))
time.sleep(5)
with cd(‘%s/%s‘ % (env.remote_deploy_dir, env.por_name)):
run("rm -rf lib && tar -xvf %s.tar.gz" % (env.por_name))
run("./bin/start.sh")
time.sleep(5)
env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))
if len(env.remote_pro_pid) != 0:
print green("%s packge deploy sucessfull...."%(env.por_name))
run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))
else:
print yellow("%s packge deploy faild" % (env.por_name))
run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))
@task
def go():
backup_remote()
tar_source()
put_packge()
check_packge()
deploy_packge()
本文出自 “网行天下” 博客,请务必保留此出处http://kuangkuang.blog.51cto.com/838/1932280
python fabric模块 生产环境dubbo代码包发布管理完整实例