今天分享一個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執行一下效果如下:
這裡面我們需要知道fab是fabric安裝的命令列工具,我們主要是通過它進行操作。
我個人平時用的比較多的命令有:
run 遠端執行命令local 本地執行命令cd 遠端切換目錄lcd 本地切換@task 裝飾器宣告函式為fab task
簡單的指令碼我覺得是已經夠用了,複雜一點需要更多操作了,詳情見後文。
部署步驟
通常情況下,作為一個Python工程師我們釋出程式碼需要做的事兒常見的有以下幾點:
-
git pull 拉取最新程式碼,比如master分支(或者develop分支)
-
tar 打包最新程式碼
-
rsync增量同步到遠端伺服器,去掉一些不需要的本地目錄
-
備份資料庫或者備份程式碼
-
supervisor指定重啟遠端一個或多個服務,通過互動式指令判斷
-
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更為複雜強大的管理工具,後期我們再進行分享,感謝你的關注。
一個堅持原創的Python公號
相關文章:
掃碼免費加入