美文网首页程序员
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