Python自動化部署工具-Fabric

濤哥聊Python發表於2019-01-20

image

今天分享一個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更多引數含義,今天這個工具就介紹到這兒.

另外有不清楚docker-compose這個命令的參考我前面的文章。關於Python伺服器運維,除了Fabric 還有SaltStack,Ansible更為複雜強大的管理工具,後期我們再進行分享,感謝你的關注。

image

一個堅持原創的Python公號

相關文章:

容器化部署實踐之Django應用部署(二)

使用Docker容器化部署實踐之Django應用部署(一)

Linux系列開坑記(一)-常用的3個命令

Docker容器化部署實踐Docker Compose

image

掃碼免費加入

相關文章