python fabric實(shí)現(xiàn)遠(yuǎn)程部署
需求描述
在多人協(xié)同開發(fā)項(xiàng)目的過程中,幾乎每天我們都要提交代碼到git服務(wù)器,然后部署到測(cè)試服務(wù)器,每天都在敲那重復(fù)的幾行命令,實(shí)在是無趣。怎么辦?運(yùn)維自動(dòng)化!接下來就說說fabric這玩意兒,替我們完成一些重復(fù)繁雜的工作,相信你會(huì)跟我一樣喜歡上它的!
本文項(xiàng)目背景
我們這次做的項(xiàng)目是用的django框架,每天我們提交代碼到git服務(wù)器后,都要手動(dòng)上傳代碼到測(cè)試服務(wù)器,然后執(zhí)行一系列django框架的命令。每天都要浪費(fèi)10多分鐘的時(shí)間,做著重復(fù)的勞動(dòng),這些工作實(shí)在不是一個(gè)程序員該干的。。。
解決方案
借助Python的fabric模塊可以將自動(dòng)化部署或者多機(jī)操作的命令固化到一個(gè)腳本里,然后通過此腳本去執(zhí)行。
安裝fabric
注意:本機(jī)和目標(biāo)服務(wù)器都要安裝一下
sudo easy_install fabric
或者用pip安裝:
pip install fabric
編寫腳本
local 是在本機(jī)執(zhí)行;run 是在遠(yuǎn)程機(jī)執(zhí)行
from fabric.api import hosts, run, env, local, cd, get, lcdfrom fabric.tasks import executeenv.hosts = ["fab@192.168.1.101:22", "root@192.168.1.101:22"]env.passwords = {"fab@192.168.1.101:22": "fab", "root@192.168.1.101:22": "tofabor"}@hosts("ktv@192.168.1.101:22")def update(): """更新測(cè)試服務(wù)器代碼""" with cd("/opt/project/project"): # 進(jìn)入測(cè)試服務(wù)器的項(xiàng)目目錄 run("git pull origin master") # 從git服務(wù)器的master分支下拉最新代碼 run("/usr/local/bin/python2.7 /opt/project/project/manage.py makemigrations") # 這是django框架檢測(cè)數(shù)據(jù)庫變動(dòng)的命令 run("/usr/local/bin/python2.7 /opt/project/project/manage.py migrate") # 這是django框架執(zhí)行數(shù)據(jù)庫變更的命令@hosts("ktv@192.168.1.101:22")def restart(): """重啟服務(wù)""" execute('stop') execute('start')@hosts("root@192.168.1.101:22")def start(): """開始服務(wù)""" with cd("/opt/project/project"): run("supervisorctl start dev")@hosts("ktv@192.168.1.101:22")def stop(): """停止服務(wù)""" pids = run("ps -ef |grep '9001'| awk '{print $2}'") pid_list = pids.split('/r/n') for i in pid_list[:-2]: run('kill -9 %s' % i) # 殺掉運(yùn)行服務(wù)進(jìn)程
如上腳本保存為fabfile.py (也可保存為其他名稱,只是運(yùn)行命令不一樣,下面會(huì)詳述)
執(zhí)行腳本
如果你的腳本名稱為fabfile.py,那么可以在終端進(jìn)入你fabfile.py的目錄,敲入如下命令回車:
fab update
緊接著,你會(huì)看到終端提示你輸入git賬號(hào)及密碼,待你輸入成功后,將自動(dòng)下拉git服務(wù)器的代碼到測(cè)試服務(wù)器。
之后運(yùn)行如下命令,重啟服務(wù):
fab restart
如果你的文件名為其他名稱,比如ab.py, 那么執(zhí)行 fab update /restart是錯(cuò)誤的,怎么云運(yùn)行呢?
新聞熱點(diǎn)
疑難解答
圖片精選