专栏首页小网管运维之路fabric自动发布django博客系统

fabric自动发布django博客系统

安装模块

pip -V
# 查看是不是pip3

pip install fabric3
# 安装模块

fabric 命令列表

fab list

fab ping     #测试主机ping外网...
fab upload #上传代码到git
fab deploy #部署到服务器

vi fabfile.py

from fabric.api import env,run,cd,local,task,abort
from fabric.colors import green,yellow,red
from fabric.context_managers import settings,hide
from fabric.contrib.console import confirm 

import datetime
nowTime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

env.user = 'root'
env.port = '55555'
env.hosts = 'ops.attacker.club' #主机地址
env.key_filename = ['~/.ssh/id_rsa'] #本地秘钥



def get_git_status():
    git_status_result = local("git status", capture=True)
    #if "无文件要提交,干净的工作区" not in git_status_result:
    if "modified"  in git_status_result:
        print (red("当前分支还有文件没有提交"))
        print (git_status_result)
        abort("已经终止")

def local_unit_test():
    with settings(warn_only=True):
        test_result = local("python3 manage.py test")
        if test_result.failed:
            print (test_result)
            if not confirm(red("单元测试失败,是否继续?")):
                abort("已经终止")


def download_code():
    run("git checkout .")
    run("git pull")
    print(green("\n[%s] 完成代码下载" % env.hosts))

def app ():
    run("pip3 install -i http://mirrors.aliyun.com/pypi/simple   --trusted-host mirrors.aliyun.com  -r  requirements.txt")
    run("python3 manage.py collectstatic --noinput &&python3 manage.py migrate")
    run('''sed -i "/ALLOWED_HOSTS/c ALLOWED_HOSTS= \['127.0.0.1','.attacker.club'\]" mysite/settings.py ''' )
    run("sed -i 's#/data/LJblog#/www/django/blog#' mysite/settings.py")
    run("sed -i 's/DEBUG = True/DEBUG = False/' mysite/settings.py")
    run("/usr/bin/supervisord -c /etc/supervisor/supervisord.conf")
    print(green("\n[%s] app完成部署" % env.hosts))



@task
def upload():
    with settings(hide('running','stderr'), warn_only=True):
        local("git add .")
        local("git commit -m '%s 提交' " % (nowTime))
        local("git push")
        print(green("\n\n 完成代码上传"))


@task
def deploy():
    with settings(hide('running','stderr'), warn_only=True):
        with cd("/www/django/blog"):
            get_git_status()
            local_unit_test()
            run ("pkill sup")
            download_code()
            app()
            print(yellow("\n\n[%s] 部署完毕 !!!" % env.hosts))



@task
def ping ():
    with settings(hide('running','stderr'),warn_only=True):
        run("ping -c 1 114.114.114.114")

sed替换settings.py里面 ALLOWED_HOSTS允许地址、DEBUG模式、static_root静态文件路径

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • git 代码托管操作

    …or create a new repository on the command line

    晴天Online
  • Linux高级入侵检测平台- AIDE

    AIDE(Advanced Intrusion Detection Environment)在linux下"一切皆是文件"这是一款针对文件和目录进行完整性对比...

    晴天Online
  • Smokeping 网络链路状态和稳定性监控

    晴天Online
  • 如何同步多个 Git 远程仓库

    链接 | https://my.oschina.net/taadis/blog/3073220

    好好学java
  • Git一直用不明白?说明你没用过这个网站

    Git是近年来越来越流行的版本控制工具,然而与传统的版本控制工具svn比起来,git由于具有分布式的特点,在理解和使用上不是那么的直观,比如远程分支的fetch...

    大神带我来搬砖
  • git入门篇(3)--更新文件到版本库

    今天主要谈谈本地搭建版本库,说到本篇文章其实一把心酸一把泪,上周写得差不多了,结果遇到公众号服务器崩了,没有备份所以文章数据丢失了,然后这几天一直在加班一直没找...

    逆月翎
  • git下载自己项目到本地

    机器学习和大数据挖掘
  • 用apache服务在Centos系统中搭建Git服务器

    [图片上传失败...(image-1f0008-1512008839841)] 首次搭建可以去京东云注册一个账号可以免费领一个月的云主机 京东云

    楠楠
  • 看完这篇,还不会 Git 的话,我就 ......

    今天齐姐简单讲下 Git 的实现原理,知其所以然才能知其然;并且梳理了日常最常用的 12 个命令,分为三大类分享给你。

    帅地
  • 如何同步多个 git 远程仓库

    以前源码是托管在 github 的, 现在想要同步托管在 gitee, 一做备份分发, 二方便国内下载使用(网速可观), 三防特色墙...

    java思维导图

扫码关注云+社区

领取腾讯云代金券