Python自动化部署工具-Fabric

image

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

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

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

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

除了与远端服务交互,也很是方便咱们平常执行较为复杂,须要要定制化的Python函数。shell

安装

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

一个官网例子:api

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

使用fab执行一下效果以下:bash

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更多参数含义,今天这个工具就介绍到这儿.

另外有不清楚docker-compose这个命令的参考我前面的文章。关于Python服务器运维,除了Fabric 还有SaltStack,Ansible更为复杂强大的管理工具,后期咱们再进行分享,感谢你的关注。

image

一个坚持原创的Python公号

相关文章:

容器化部署实践之Django应用部署(二)

使用Docker容器化部署实践之Django应用部署(一)

Linux系列开坑记(一)-经常使用的3个命令

Docker容器化部署实践Docker Compose

image

扫码免费加入

相关文章
相关标签/搜索