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

2022-07-03 14:42:43 浏览数 (1)

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

0 人点赞