共计 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