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.pydeploy這裡還可以指定釋出哪個分支的程式碼

這樣指定某一個角色的伺服器,某一個分支進行釋出非常簡單方便,對於經常使用的複雜命令操作我們還可以作為縮寫命令來進行操作。

其他

類似我們要在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

掃碼免費加入

來源:https://juejin.im/post/5c42f5caf265da61290a7231

相關文章