今天分享一個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
這裏面咱們須要知道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.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更爲複雜強大的管理工具,後期咱們再進行分享,感謝你的關注。
一個堅持原創的Python公號
相關文章:
掃碼免費加入