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

掃碼免費加入

相關文章
相關標籤/搜索