python Fabric使用详解及示例
#!/usr/bin/env python# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
import time
env.hosts=['192.168.1.21','192.168.1.22']
env.user='root'
env.password='124530'
env.project_dev_source='/data/dev/webadmin/'
env.project_tar_source='/data/dev/releases/'
env.project_pack_name='release'
env.deploy_project_root='/data/www/webadmin/'
env.deploy_release_dir='releases'
env.deploy_current_dir='current'
env.deploy_version=time.strftime("%Y-%m-%d")+"v2"
@runs_once
def input_version():
return prompt("please input your roolback version ID ",default="")
@task
@runs_once
def tar_source():
print yellow("creating source package....")
with lcd(env.project_dev_source):
local("tar -zcf %s.tar.gz ." % (env.project_tar_source + env.project_pack_name))
print green("creating source package success!")
@task
def put_package():
print yellow("start put package....")
with settings(warn_only=True):
with cd(env.deploy_project_root+env.deploy_release_dir):
run("mkdir %s" % (env.deploy_version))
env.deploy_full_path=env.deploy_project_root + env.deploy_release_dir + "/" +env.deploy_version
with settings(warn_only=True):
result=put(env.project_tar_source+env.project_pack_name+".tar.gz",env.deploy_full_path)
if result.failed and not ("put file failed,Continue?"):
abort('Aborting file put task')
with cd(env.deploy_full_path):
run("tar -zxf %s.tar.gz" % (env.project_pack_name))
run("rm -rf %s.tar.gz" % (env.project_pack_name))
print green("put & untar package success!")
@task
def make_symlink():
print yellow("update current symlink")
env.deploy_full_path=env.deploy_project_root + env.deploy_release_dir + "/" +env.deploy_version
with settings(warn_only=True):
run("rm -rf %s" % (env.deploy_project_root+env.deploy_current_dir))
run("ln -s %s %s" % (env.deploy_full_path,env.deploy_project_root+env.deploy_current_dir))
print green("make symlink success!")
@task
def roolback():
print yellow("roolback project version")
versionid=input_version()
if versionid=='':
abort("project version Id error,abort!")
env.deploy_full_path=env.deploy_project_root + env.deploy_release_dir + "/" +versionid
run("rm -f %s" % (env.deploy_project_root+env.deploy_current_dir))
run("ln -s %s %s" % (env.deploy_full_path,env.deploy_project_root+env.deploy_current_dir))
print green("roolback success!")
@task
def go():
tar_source()
put_package()
make_symlink()
生产nginx目录配置
root /data/www/webadmin/current;
页:
[1]