fabric 是一個(gè)python包 是一個(gè)基于ssh的部署工具包
通常用來對網(wǎng)站 微服務(wù)等等的批量部署 例如 我有5臺線上服務(wù)器 可以通過一臺對著5臺分發(fā),實(shí)現(xiàn)自動部署的目的。
簡單介紹下 fabric的常用命令
常用命令?
lcd(dir): 進(jìn)入本機(jī)某目錄 local(cmd): 本機(jī)上執(zhí)行命令 cd(dir): 進(jìn)入服務(wù)器某目錄 run(cmd):服務(wù)器上執(zhí)行命令
Fabric
Fabric是一個(gè)python的遠(yuǎn)程執(zhí)行shell的庫,同時(shí)它也是一個(gè)命令行工具。它提供了豐富的同 SSH 交互的接口,可以用來在本地或遠(yuǎn)程機(jī)器上自動化、流水化地執(zhí)行 Shell 命令。
安裝Fabric
Fabric的官網(wǎng)是?www.fabfile.org ,源碼托管在?Github 上。你可以clone源碼到本地,然后通過下面的命令來安裝。但是在源碼安裝前,你必須先將Fabric的依賴包?Paramiko 裝上。
python setup.py develop
同時(shí)也可以使用pip安裝,因?yàn)閒abric是python的一個(gè)第三方庫,只需一條命令即可:
?pip install fabric
python3 安裝時(shí)使用的是fabric3 :( 安裝fabric3之前,需要先卸載fabric.)
- # fabric3 支持 python3
- pip uninstall fabric
- pip3 install fabric3
fabric 不只是一個(gè)Python 模塊,fabric 還是一個(gè)命令行工具,可以使用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的使用方式是通過編寫一個(gè)python文件,該文件中包含多個(gè)函數(shù),然后使用fab命令調(diào)用這些函數(shù),做相應(yīng)的任務(wù)。這些函數(shù)在fabric中稱為task。
# filename:abc.py? from fabric.api import *? def task1(): print("hello") def hello(): print("hello world")
寫好這個(gè)python文件后,在當(dāng)前目錄的路徑下使用fab工具執(zhí)行文件中的函數(shù)
[root@localhost python文件所在的目錄]# fab -f abc.py hello hello world ?# -f 指定fabfile文件,默認(rèn)為fabfile.py,若文件名是當(dāng)前目錄下的fabfile.py則無需指定
任務(wù)參數(shù)
此時(shí)你可能會想,如果這個(gè)函數(shù)有參數(shù)怎么辦呢?應(yīng)該如何傳遞參數(shù)給函數(shù)呢?Fabric 支持 Shell 兼容的參數(shù)用法:?<任務(wù)名>:<參數(shù)>, <關(guān)鍵字參數(shù)名>=<參數(shù)值>,... 用起來就是這樣。
def hello(name="world"): print("hello {}".format(name))
我們可以這樣去指定參數(shù)
$ fab hello:name=Jeff # 或者 fab hello:Jeff hello Jeff ?Done.
小試牛刀
現(xiàn)在我們假設(shè)需要寫一個(gè)fabfile.py,能夠在每次web項(xiàng)目代碼更新后使用git提交并遠(yuǎn)程服務(wù)器拉去最新代碼并運(yùn)行,需求描述清楚了,開干吧!
# fabfile.py # 這里建議將該文件放入項(xiàng)目文件的根目錄中,方便git提交 from fabric.api import local def test(): local('python manage.py test myapp') # 測試是否能正常運(yùn)行 def commit(): local('git add -p && git commit -m "for test"') def push(): local('git push') def prepare_deploy(): test() commit() push()
這個(gè)?prepare_deploy 任務(wù)可以單獨(dú)調(diào)用,也可以調(diào)用更細(xì)粒度的子任務(wù)。
故障
Fabric 會檢查被調(diào)用程序的返回值,如果這些程序沒有干凈地退出,F(xiàn)abric 會終止操作。我們什么都不用做,F(xiàn)abric 檢測到了錯(cuò)誤并終止,不會繼續(xù)執(zhí)行 commit 任務(wù)。
我們也可以對故障進(jìn)行一定的處理和判斷
from fabric.api import local, settings, abort from fabric.contrib.console import confir 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.") # 指定錯(cuò)誤退出信息 # 一個(gè)名為 warn_only 的設(shè)置(或著說 環(huán)境變量 ,通常縮寫為 env var )可以把退出換為警告,以提供更靈活的錯(cuò)誤處理。如果設(shè)置為False,則一條命令運(yùn)行失敗會就會退出,不再執(zhí)行后面的命令。
建立連接
終于到了連接了,這個(gè)工具主要作用就是在遠(yuǎn)程執(zhí)行命令呀,學(xué)會了這個(gè),我們就可以在本地執(zhí)行遠(yuǎn)程服務(wù)器的命令了。
from fabric.api import * env.hosts = ['root@192.168.10.11:22']? def deploy(): run('ls') # run()用于執(zhí)行遠(yuǎn)程命令,local()執(zhí)行本地命令 # 執(zhí)行后會提示你輸入密碼,輸入密碼即可
至此,入門結(jié)束,后續(xù)還有更多api的講解,敬請關(guān)注!
參考鏈接:
fabric官方中文文檔:?https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html
總結(jié)
以上所述是小編給大家介紹的python三大神器之fabric使用教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
