741057228我QQ 发表于 2018-8-6 08:32:45

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]
查看完整版本: python Fabric使用详解及示例