使用fabric进行代码的自动化部署

#coding=utf-8
from fabric.api import local, abort, settings, env, cd, run
from fabric.colors import *
from fabric.contrib.console import confirm

env.hosts = ["root@115.28.×××××"]
env.password = "×××××"


def get_git_status():
    git_status_result = local("git status", capture=True)
    if "无文件要提交,干净的工作区" not in git_status_result:
        print red("****当前分支还有文件没有提交")
        print git_status_result
        abort("****已经终止")


def local_unit_test():
    with settings(warn_only=True):
        test_result = local("python manage.py test")
        if test_result.failed:
            print test_result
            if not confirm(red("****单元测试失败,是否继续?")):
                abort("****已经终止")


def server_unit_test():
    with settings(warn_only=True):
        test_result = run("python manage.py test")
        if test_result.failed:
            print test_result
            if not confirm(red("****单元测试失败,是否继续?")):
                abort("****已经终止")


def upload_code():
    local("git push origin dev")
    print green("****代码上传成功")


def deploy_at_server():
    print green("****ssh到服务器进行下列操作")
    with cd("/var/www/××××××"):
        #print run("pwd")
        print green("****将在远程仓库下载代码")
        run("git checkout dev")
        get_git_status()
        run("git pull origin dev")
        print green("****将在服务器上运行单元测试")
        server_unit_test()
        run("service apache2 restart", pty=False)
        print green("****重启apache2成功")
        print green("********代码部署成功********")


def deploy():
    get_git_status()
    local("git checkout dev", capture=False)
    print green("****切换到dev分支")
    get_git_status()
    print green("****将开始运行单元测试")
    local_unit_test()
    print green("****单元测试完成,开始上传代码")
    upload_code()
    deploy_at_server()

fabric可以将自动化部署或者多机操作的命令固化到一个脚本里,从而减少手动的操作。上面是今天第一次接触这东西后写的,确实很实用。运行fab deploy就行了。
主要逻辑就是将本地的dev分支跑单元测试,然后提交到服务器,ssh登陆到服务器,然后pull下来,再跑单元测试,然后重启apache2。第一次写,可能比较简单,将持续改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值