需求描述
在多人協同開發項目的過程中,幾乎每天我們都要提交代碼到git服務器,然后部署到測試服務器,每天都在敲那重復的幾行命令,實在是無趣。怎么辦?運維自動化!接下來就說說fabric這玩意兒,替我們完成一些重復繁雜的工作,相信你會跟我一樣喜歡上它的!
本文項目背景
我們這次做的項目是用的django框架,每天我們提交代碼到git服務器后,都要手動上傳代碼到測試服務器,然后執行一系列django框架的命令。每天都要浪費10多分鐘的時間,做著重復的勞動,這些工作實在不是一個程序員該干的。。。
解決方案
借助Python的fabric模塊可以將自動化部署或者多機操作的命令固化到一個腳本里,然后通過此腳本去執行。
安裝fabric
注意:本機和目標服務器都要安裝一下
sudo easy_install fabric
或者用pip安裝:
pip install fabric
編寫腳本
local 是在本機執行;run 是在遠程機執行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
from fabric.api import hosts, run, env, local, cd, get, lcd from fabric.tasks import execute def update(): """更新測試服務器代碼""" with cd( "/opt/project/project" ): # 進入測試服務器的項目目錄 run( "git pull origin master" ) # 從git服務器的master分支下拉最新代碼 run( "/usr/local/bin/python2.7 /opt/project/project/manage.py makemigrations" ) # 這是django框架檢測數據庫變動的命令 run( "/usr/local/bin/python2.7 /opt/project/project/manage.py migrate" ) # 這是django框架執行數據庫變更的命令 def restart(): """重啟服務""" execute( 'stop' ) execute( 'start' ) def start(): """開始服務""" with cd( "/opt/project/project" ): run( "supervisorctl start dev" ) def stop(): """停止服務""" 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) # 殺掉運行服務進程 |
如上腳本保存為fabfile.py (也可保存為其他名稱,只是運行命令不一樣,下面會詳述)
執行腳本
如果你的腳本名稱為fabfile.py,那么可以在終端進入你fabfile.py的目錄,敲入如下命令回車:
fab update
緊接著,你會看到終端提示你輸入git賬號及密碼,待你輸入成功后,將自動下拉git服務器的代碼到測試服務器。
之后運行如下命令,重啟服務:
fab restart
如果你的文件名為其他名稱,比如ab.py, 那么執行 fab update /restart是錯誤的,怎么云運行呢?
fab -f ab update
fab -f ab restart
注:fabric相當強大,此文只是列舉一小功能。如需深入學習,請參見官方文檔http://docs.fabfile.org/en/1.6/
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。