Talk is cheap,show me the code. 致敬Linus Torvalds
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import *
from fabric.operations import sudo
#服务器列表
env.roledefs = {"djdev": ["root@122.122.122.122:22"],
"djprd": ["root@123.123.123.123:22", "root@124.124.124.124:22"]}
#对应服务器列表的密码列表
env.passwords = {"root@122.122.122.122:22": "122",
"root@123.123.123.123:22": "123",
"root@124.124.124.124:22": "124"}
#使用装饰器关联下服务器列表 djdev
@roles("djdev")
def djdev(): # 使用 develop 分支部署一个测试环境
#部署到服务器的 git地址
code_dir = '/srv/Gits/djdev'
#部署到服务器的项目地址
target_dir = '/srv/DjangoObject/djdev'
with settings(warn_only=True):
if run("test -d %s" % code_dir).failed: # 这里比较赞可以 try 一下错误
run("mkdir -p %s" % code_dir) # 创建目录
run("git clone http://xxx/dj.git %s" % code_dir)
with cd(code_dir): # 切换到 code_dir 目录
run("git pull && git checkout develop") # 测试服部署develop 分支
run("cp -rp %s/* %s/" % (code_dir, target_dir)) # 拷贝到目标目录
with cd(target_dir): # 切换到 target_dir 目录
run("python manage-test.py makemigrations")
if run("python manage-test.py migrate").failed:
run("python manage-test.py migrate --fake") # 用过 django 的同学会懂的 搞乱migration 后可以使用 fake 跳过去
run("supervisorctl status") # supervisor 一个很赞的进程管理软件 以后专谈
run("supervisorctl restart djdev")
run("supervisorctl status")
run("nginx -t")
run("nginx -s reload") # 重启下 nginx
run("nginx -t")
print green("success")
@roles("djprd")
def djprd(v): # v 代表 tag 版本号
code_dir = '/srv/Gits/djprd'
target_dir = '/srv/DjangoObject/djprd'
with settings(warn_only=True):
if run("test -d %s" % code_dir).failed:
run("mkdir -p %s" % code_dir)
run("git clone http://xxx/dj.git %s" % code_dir)
with cd(code_dir):
run("git checkout master && git pull && git checkout %s" % v)
run("cp -rp %s/* %s/" % (code_dir, target_dir))
with cd(target_dir):
run("python manage.py makemigrations")
run("python manage.py migrate")
run("supervisorctl status")
run("supervisorctl restart all")
run("supervisorctl status")
run("nginx -t")
run("nginx -s reload")
print green("success")
# fab -f fabfile.py djdev
# fab -f fabfile.py djprd:v=1.0.0
以上
网友评论