fabric 快速部署,回滚,打包,上传

本文详细介绍了如何使用Fabric库实现自动化部署及版本回滚,包括创建项目源包、上传至服务器、解压并更新当前版本等功能。
#!/usr/bin/env python
#--coding:utf8--
'''
http://www.cnblogs.com/onlyfu/p/4926351.html
'''
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
import time

#environment value
env.user ='root'
env.hosts=['192.168.1.86','192.168.1.116']
env.password='pass_key'
env.project_dev_source='/var/www/html/'#开发机项目主目录
env.project_tar_source='/var/www/releases/'#开发机压缩包目录
env.project_pack_name='release'#项目压缩包名release.tar.gz
env.deploy_project_root='/var/www/html/'#生产环境主目录
env.deploy_release_dir='releases'#项目发布目录:/var/www/html/releases/下
env.deploy_current_dir='current' #对外服务当前版本软连接
env.deploy_version=time.strftime("%Y%m%d")+"v2"#版本号
env.deploy_full_path=""
#版本号,回归操作
@runs_once
def input_versionid():
    return prompt("input project roollback 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): #cd /var/www/html/releases/
            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[Y/N]:?"):
        abort("aborting file put task!")
    with cd(env.deploy_full_path):#解压后删除压缩包
        run("tar -zxcf %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 rollback():
    print yellow("rollback project version")
    versionid= input_versionid() #获得用户输入回滚版本号
    if versionid == '':
        abort("project version ID error,abort!")
    env.deploy_full_path = env.deploy_project_root+env.deploy_release_dir+"/"+versionid
    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("rollback success!"))

@task
def go():
    tar_source()
    put_package()
    make_symlink()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值