阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

139次阅读
没有评论

共计 1793 个字符,预计需要花费 5 分钟才能阅读完成。

使用 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。第一次写,可能比较简单,将持续改进。

使用 Vagrant 和 Fabric 用于集成测试 http://www.linuxidc.com/Linux/2014-07/104113.htm

Fabric:Python 远程部署工具 http://www.linuxidc.com/Linux/2014-05/101616.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计1793字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中