python fabric實現(xiàn)遠程部署
python fabric實現(xiàn)遠程部署
需求描述
在多人協(xié)同開發(fā)項目的過程中,幾乎每天我們都要提交代碼到git服務(wù)器,然后部署到測試服務(wù)器,每天都在敲那重復(fù)的幾行命令,實在是無趣。怎么辦?運維自動化!接下來就說說fabric這玩意兒,替我們完成一些重復(fù)繁雜的工作,相信你會跟我一樣喜歡上它的!
本文項目背景
我們這次做的項目是用的django框架,每天我們提交代碼到git服務(wù)器后,都要手動上傳代碼到測試服務(wù)器,然后執(zhí)行一系列django框架的命令。每天都要浪費10多分鐘的時間,做著重復(fù)的勞動,這些工作實在不是一個程序員該干的。。。
解決方案
借助Python的fabric模塊可以將自動化部署或者多機操作的命令固化到一個腳本里,然后通過此腳本去執(zhí)行。
安裝fabric
注意:本機和目標服務(wù)器都要安裝一下
sudo easy_install fabric
或者用pip安裝:
pip install fabric
編寫腳本
local 是在本機執(zhí)行;run 是在遠程機執(zhí)行
from fabric.api import hosts, run, env, local, cd, get, lcd from fabric.tasks import execute env.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(): """更新測試服務(wù)器代碼""" with cd("/opt/project/project"): # 進入測試服務(wù)器的項目目錄 run("git pull origin master") # 從git服務(wù)器的master分支下拉最新代碼 run("/usr/local/bin/python2.7 /opt/project/project/manage.py makemigrations") # 這是django框架檢測數(shù)據(jù)庫變動的命令 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) # 殺掉運行服務(wù)進程
如上腳本保存為fabfile.py (也可保存為其他名稱,只是運行命令不一樣,下面會詳述)
執(zhí)行腳本
如果你的腳本名稱為fabfile.py,那么可以在終端進入你fabfile.py的目錄,敲入如下命令回車:
fab update
緊接著,你會看到終端提示你輸入git賬號及密碼,待你輸入成功后,將自動下拉git服務(wù)器的代碼到測試服務(wù)器。
之后運行如下命令,重啟服務(wù):
fab restart
如果你的文件名為其他名稱,比如ab.py, 那么執(zhí)行 fab update /restart是錯誤的,怎么云運行呢?
fab -f ab update
fab -f ab restart
注:fabric相當強大,此文只是列舉一小功能。如需深入學習,請參見官方文檔http://docs.fabfile.org/en/1.6/
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python基于socket實現(xiàn)的UDP及TCP通訊功能示例
這篇文章主要介紹了python基于socket實現(xiàn)的UDP及TCP通訊功能,結(jié)合實例形式分析了基于Python socket模塊的UDP及TCP通信相關(guān)客戶端、服務(wù)器端實現(xiàn)技巧,需要的朋友可以參考下2019-11-11一篇文章入門Python生態(tài)系統(tǒng)(Python新手入門指導(dǎo))
原文寫于2011年末,雖然文中關(guān)于Python 3的一些說法可以說已經(jīng)不成立了,但是作為一篇面向從其他語言轉(zhuǎn)型到Python的程序員來說,本文對Python的生態(tài)系統(tǒng)還是做了較為全面的介紹2015-12-12python接口自動化之ConfigParser配置文件的使用詳解
這篇文章主要介紹了python接口自動化之ConfigParser配置文件的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Python實現(xiàn)視頻字幕時間軸格式轉(zhuǎn)換的示例
本文主要介紹了Python實現(xiàn)視頻字幕時間軸格式轉(zhuǎn)換的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-11-11Python中sklearn實現(xiàn)交叉驗證示例分析
這篇文章主要介紹了Python中sklearn實現(xiàn)交叉驗證,本文python的版本為3.8,各個版本之間函數(shù)名字略有不同,但是原理都是一樣的,集成開發(fā)環(huán)境使用的是Anaconda的Spyder,需要的朋友可以參考下2023-08-08