zoukankan      html  css  js  c++  java
  • Python自动化部署工具-Fabric

    今天分享一个Python的自动化发布工具—Fabric。

    我在前面文章「Linux系列开坑记(一)-常用的3个命令」说了tar,rsync,supervisor这三个,从打包上传备份上线,进程管理工具。

    我相信细心的读者发现了,但是这里其实还缺一个工具。

    那就是衔接这三个步骤的工具,它可以通过SSH,让我们在远端服务器执行shell命令更加方便,更加智能的与服务器进行交互。

    除了与远端服务交互,也非常方便我们日常执行较为复杂,需要要定制化的Python函数。

    安装

    pip install Fabric # 安装
    pip freeze > requirements.txt # 把安装包写入文件中

    一个官网例子:

    def hello(name='sitin'):
        print("Hello world %s!" % name)
    

    使用fab执行一下效果如下:

     
    image

    这里面我们需要知道fab是fabric安装的命令行工具,我们主要是通过它进行操作。

    我个人平时用的比较多的命令有:

    run 远端执行命令
    local 本地执行命令
    cd 远端切换目录
    lcd 本地切换
    @task 装饰器声明函数为fab task

    简单的脚本我觉得是已经够用了,复杂一点需要更多操作了,详情见后文。

    部署步骤

    通常情况下,作为一个Python工程师我们发布代码需要做的事儿常见的有以下几点:

    1. git pull 拉取最新代码,比如master分支(或者develop分支)

    2. tar 打包最新代码

    3. rsync增量同步到远端服务器,去掉一些不需要的本地目录

    4. 备份数据库或者备份代码

    5. supervisor指定重启远端一个或多个服务,通过交互式指令判断

    6. sentry查看日志正常与否

    除了最后一步,这里面所有的操作我们都在fabfile.py就进行操作了,一般情况下fabfile.py放在项目根目录,当然你放在其他地方也没有什么问题。通过-f进行指定就行。

    概要讲了,下面请参看我们的一个实战例子

    一个例子

    from fabric.api import (
        with_settings,
        hosts,
        cd,  # 远端
        lcd, # 本地切换目录
        run, # 执行
        env,
    )
    
    EST_ENV = '127.0.0.1'TEST_USER = 'test'env.forward_agent = True# 允许本地 SSH 代理连接远程终端时跳转@hosts(TEST_ENV) # 指定远程操作的机器地址@with_settings(user=TEST_USER) # 用来临时设定 env 变量,可以等同于 with settingsdef deploy_test():
        # 发布测试环境
        local('git pull --rebase upsgream dev') # local执行本地命令拉取代码到本地,这个可以用CI自动发布,就不用拉取到本地。
        local('rsync -r . --exclude=tmp/ --exclude=backup/ sitin@yourip:/data/your_project') # 上传代码    with cd('/data/your_project'): # 表示所有操作在这个目录下面
            run('docker-compose pull test')  # test镜像名
            backup_db() # 这里其实就是一个普通备份函数
            run('docker-compose stop test') # 执行远端命令同local相反
            run('docker-compose rm -f test')
            run('docker-compose run --rm test python manage.py migrate') # db同步
            run('docker-compose up -d test')
    

    在终端执行命令

    fab deploy_test # 就能进行发布了测试环境了
    fab deploy_product # 如果有就能发布了

    通常情况下测试,开发,服务器与线上操作不太一样,我们可以通过上面方式进行操作。除了上面的操作之后,如果我们测试线上完全一直或者多台服务器,可以通过指定不同角色来进行选择服务器的发布。

    env.roledefs = {    
      'test': ['test@yourip'],  # 指定多台机器    
      'dev': ['dev@yourip'],     
      'prod': ['opt@yourip2'],   
    }   
    def deploy(branch=master): 
        pass
    

    fab -R test(上面定义的角色) deploy -f fabfile.py
    deploy这里还可以指定发布哪个分支的代码

    这样指定某一个角色的服务器,某一个分支进行发布非常简单方便,对于经常使用的复杂命令操作我们还可以作为缩写命令来进行操作。

    其他

    类似我们要在docker里面进行docker-compose run --rm python manage.py migrate这种较长操作。

    把操作写到fabfile.py里面的函数,就类似linux下面alias一样,fab migrate就完了简单方便。

    除了上面,我们可以指定发布版本颜色进行区分发布成功出错与否,进行警示我们,非常方便快捷。

    更多的大家可以参看fab -h更多参数含义,今天这个工具就介绍到这儿.



  • 相关阅读:
    PetShop4.0学习笔记[01]:订单处理[01]——多线程程序结构
    PetShop4.0学习笔记——使用命名空间
    PetShop 4.0学习笔记:消息队列MSMQ
    petshop4 MSDTC 不可用解决
    经典工具软件备份
    ASP.NET知识点(三):购物车与收藏蓝的实现[Profile]
    PetShop 4.0知识点:加密和解密Web.config文件的配置节
    PetShop 4.0知识点:base 关键字用于从派生类中访问基类的成员
    从Word,Excel中提取Flash
    线性结构
  • 原文地址:https://www.cnblogs.com/ExMan/p/12463320.html
Copyright © 2011-2022 走看看