Fabric是一個python的遠程執行shell的庫,同時它也是一個命令行工具。它提供了豐富的同 SSH 交互的接口,能夠用來在本地或遠程機器上自動化、流水化地執行 Shell 命令。html
Fabric的官網是 www.fabfile.org,源碼託管在Github上。你能夠clone源碼到本地,而後經過下面的命令來安裝。可是在源碼安裝前,你必須先將Fabric的依賴包Paramiko裝上。python
python setup.py develop
同時也可使用pip安裝,由於fabric是python的一個第三方庫,只需一條命令便可:git
pip install fabric
python3 安裝時使用的是fabric3 :( 安裝fabric3以前,須要先卸載fabric.)github
# fabric3 支持 python3web
pip uninstall fabricshell
pip3 install fabric3api
fabric 不僅是一個Python 模塊,fabric 仍是一個命令行工具,可使用fab -h查看幫助信息 服務器
E:\my_data\hk-project>fab -V Fabric3 1.14.post1 Paramiko 2.4.2 E:\my_data\hk-project>fab -h
fabric的使用方式是經過編寫一個python文件,該文件中包含多個函數,而後使用fab命令調用這些函數,作相應的任務。這些函數在fabric中稱爲task。app
# filename:abc.py from fabric.api import * def task1(): print("hello") def hello(): print("hello world")
寫好這個python文件後,在當前目錄的路徑下使用fab工具執行文件中的函數函數
[root@localhost python文件所在的目錄]# fab -f abc.py hello hello world # -f 指定fabfile文件,默認爲fabfile.py,若文件名是當前目錄下的fabfile.py則無需指定
此時你可能會想,若是這個函數有參數怎麼辦呢?應該如何傳遞參數給函數呢?Fabric 支持 Shell 兼容的參數用法: <任務名>:<參數>, <關鍵字參數名>=<參數值>,...
用起來就是這樣。
def hello(name="world"): print("hello {}".format(name))
咱們能夠這樣去指定參數
$ fab hello:name=Jeff # 或者 fab hello:Jeff hello Jeff Done.
如今咱們假設須要寫一個fabfile.py,可以在每次web項目代碼更新後使用git提交併遠程服務器拉去最新代碼並運行,需求描述清楚了,開幹吧!
# fabfile.py # 這裏建議將該文件放入項目文件的根目錄中,方便git提交 from fabric.api import local def test(): local('python manage.py test myapp') # 測試是否能正常運行 def commit(): local('git add -p && git commit -m "for test"') def push(): local('git push') def prepare_deploy(): test() commit() push()
這個 prepare_deploy
任務能夠單獨調用,也能夠調用更細粒度的子任務。
Fabric 會檢查被調用程序的返回值,若是這些程序沒有乾淨地退出,Fabric 會終止操做。咱們什麼都不用作,Fabric 檢測到了錯誤並終止,不會繼續執行 commit 任務。
咱們也能夠對故障進行必定的處理和判斷
from fabric.api import local, settings, abort from fabric.contrib.console import confirm def test(): with settings(warn_only=True): result = local('./manage.py test my_app', capture=True) # result.return_code返回碼(0/1)和result.failed if result.failed and not confirm("Tests failed. Continue anyway?"): # confirm判斷用戶輸入 abort("Aborting at user request.") # 指定錯誤退出信息 # 一個名爲 warn_only 的設置(或着說 環境變量 ,一般縮寫爲 env var )能夠把退出換爲警告,以提供更靈活的錯誤處理。若是設置爲False,則一條命令運行失敗會就會退出,再也不執行後面的命令。
終於到了鏈接了,這個工具主要做用就是在遠程執行命令呀,學會了這個,咱們就能夠在本地執行遠程服務器的命令了。
from fabric.api import * env.hosts = ['root@192.168.10.11:22'] def deploy(): run('ls') # run()用於執行遠程命令,local()執行本地命令 # 執行後會提示你輸入密碼,輸入密碼便可
至此,入門結束,後續還有更多api的講解,敬請關注!
參考連接:
fabric官方中文文檔:https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html
Python 遠程部署利器 Fabric 模塊詳解:http://www.javashuo.com/article/p-zrbyyaaa-d.html