美文网首页程序员
Fabric Git 一键部署 Django 项目

Fabric Git 一键部署 Django 项目

作者: 清醒的cola | 来源:发表于2016-12-18 20:29 被阅读139次

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

以上

相关文章

网友评论

    本文标题:Fabric Git 一键部署 Django 项目

    本文链接:https://www.haomeiwen.com/subject/lqjzmttx.html