遠(yuǎn)程部署工具fabric

關(guān)于fabric

fabric是一款python庫(kù)来累,可以在執(zhí)行本地或者遠(yuǎn)端服務(wù)器上執(zhí)行shell命令瘤运,一般用于遠(yuǎn)程部署應(yīng)用或者運(yùn)維工作钱磅。

你要注意的事

由于fabric的作者更新了代碼味赃,python2.x和python3.x使用方式有所不同狠持,所以在使用之前昭齐,請(qǐng)睜開(kāi)眼睛看看你的環(huán)境中的fabric是哪個(gè)版本喧枷,$ pip show fabric帽借。


我當(dāng)時(shí)安裝的時(shí)候是默認(rèn)版本,2.4退子。
如果你的1.x版本福扬,就不要往下看了汽烦。這有1.x的基礎(chǔ)教程:傳送門颈将。

安裝

怎么快怎么來(lái)噪奄,一條命令即可:pip install fabric戳护。
如果你的項(xiàng)目是在虛擬環(huán)境中,不要忘了開(kāi)啟虛擬環(huán)境再安裝哦。

使用

fabric默認(rèn)的任務(wù)路徑是fabfile/init.py爬迟,也可以是fabfile.py菊匿。
比如說(shuō)付呕,我建了個(gè)項(xiàng)目叫"nzh_project",我想在這里執(zhí)行fabric任務(wù)跌捆,那么你就把fabfile.py文件建在這里徽职。

image.png

打開(kāi)fabfile.py,并輸入如下代碼:

from invoke import task

@task
def hello(c):
    print("Hello Fabric")

然后在pycharm編譯器中的terminal中輸入fab hello佩厚,就能看到輸出結(jié)果姆钉。


image.png
如果報(bào)錯(cuò)了

那么你看看是不是以下問(wèn)題:
1.路徑錯(cuò)誤,你必須切換到fabfile.py所在的路徑。
2.pycharm解釋器不對(duì)潮瓶,有的同學(xué)可能和我一樣用的是虛擬環(huán)境陶冷,虛擬環(huán)境是獨(dú)立的,不會(huì)受到系統(tǒng)環(huán)境的影響毯辅,所以如果沒(méi)有切換pycharm的python解釋器也會(huì)報(bào)錯(cuò)埂伦,在你import fabric的時(shí)候就會(huì)報(bào)錯(cuò)。

再?gòu)U話一句思恐,怎么切換python解釋器
image.png

image.png

在1處搜索“interpreter”沾谜,選中project interpreter,在下拉框中查看是否有你的虛擬環(huán)境解釋器壁袄,如果沒(méi)有的話类早,點(diǎn)擊4處的齒輪,選擇add local嗜逻。


image.png

在Exist environment中選擇你的虛擬環(huán)境中/bin/python3.6涩僻。我是3.6,你用的什么就選什么栈顷。
回來(lái)繼續(xù)說(shuō)正題

fabric 2.x需要使用task裝飾器來(lái)標(biāo)識(shí)函數(shù)逆日,這個(gè)被標(biāo)識(shí)的函數(shù)被稱為fabric任務(wù)。
這個(gè)任務(wù)要被執(zhí)行萄凤,必須標(biāo)注@task室抽。
再說(shuō)一下為什么hello函數(shù)要傳個(gè)參數(shù)c,如果不傳就會(huì)報(bào)TypeError錯(cuò)誤靡努。


image.png

說(shuō)是缺少一個(gè)初始化上下文參數(shù)坪圾,隨便傳一個(gè)即可。

如何調(diào)用task

任務(wù)(@task標(biāo)識(shí)的函數(shù))我們寫(xiě)完了惑朦,那么接下來(lái)就要知道如何調(diào)用兽泄。
回到終端,輸入 fab --list漾月,查看task列表.


image.png

我們可以看到病梢,里面有個(gè)可用任務(wù)hello,不正是我們寫(xiě)的hello函數(shù)么梁肿。

繼續(xù)在終端中輸入蜓陌,fab hello,完成調(diào)用吩蔑。


image.png

在遠(yuǎn)程服務(wù)器執(zhí)行shell命令

fabric的強(qiáng)大在于你可以通過(guò)SSH在遠(yuǎn)程服務(wù)器執(zhí)行shell命令钮热。
那么,我們可以寫(xiě)一個(gè)簡(jiǎn)單的“查看當(dāng)前路徑所有文件的命令”烛芬,這個(gè)命令是在遠(yuǎn)程服務(wù)器上執(zhí)行的隧期。

from invoke import task
from fabric import Connection



@task
def hello(c):
    # c.run("echo ‘hello fabric‘")
    print("Hello Fabric")


@task
def show_files(r):
    c = Connection('xx.xx.xx.xx', user='root', port=22, connect_kwargs={'password': '密碼'})
    c.run('ls')

show_files(r)里的參數(shù)r是隨便寫(xiě)的痴奏,因?yàn)槲乙膊恢浪歉缮兜摹?br> 要連接遠(yuǎn)程服務(wù)器必須有IP地址(或者域名),賬號(hào)厌秒,密碼,端口號(hào)擅憔。
所以我們要先從fabric導(dǎo)入Connection類鸵闪,初始化時(shí)傳入這些參數(shù)。
c就是一個(gè)連接實(shí)例暑诸,可以理解為sqlalchemy中操作數(shù)據(jù)庫(kù)的游標(biāo)cursor蚌讼。
你對(duì)遠(yuǎn)程服務(wù)器操作都寫(xiě)在run函數(shù)中。

比如我想在服務(wù)器上執(zhí)行l(wèi)s命令个榕,那么把ls傳入到run函數(shù)中即可篡石。

注意

再次查看可執(zhí)行任務(wù)時(shí),發(fā)現(xiàn)show_files函數(shù)名字變了西采,變成了show-files凰萨。


image.png

如果不注意,你在終端輸入fab show_files時(shí)會(huì)發(fā)現(xiàn)械馆,提示“No idea what 'show_files' is!”胖眷,也許是命名規(guī)則的問(wèn)題吧,所以注意規(guī)避就好了霹崎。
執(zhí)行的時(shí)候要輸入fab show-files珊搀。

那應(yīng)用程序分布在多臺(tái)服務(wù)器上時(shí)

很有可能遇到這樣的情況,你的應(yīng)用托管到多臺(tái)服務(wù)器上尾菇,我們總不能每臺(tái)服務(wù)器都寫(xiě)個(gè)腳本吧境析?這種情況有兩種解決辦法。
1.如果這些服務(wù)器的賬號(hào)密碼都一樣派诬,給hostname傳入一個(gè)ip地址的list劳淆。(這種方法沒(méi)試過(guò)。)
2.如果每臺(tái)服務(wù)器賬號(hào)密碼不一樣千埃,那就對(duì)每臺(tái)服務(wù)器都建立一個(gè)Connection憔儿。

    c1 = Connection('xx.xx.xx.xx', user='xxx', port=22, connect_kwargs={'password': 'xxxx'})
    c2 = Connection('xx.xx.xx.xx', user='xxx', port=22, connect_kwargs={'password': 'xxxx'})
    c3 = Connection('xx.xx.xx.xx', user='xxx', port=22, connect_kwargs={'password': 'xxxx'})
    for i in [c1, c2, c3]:
        i.run('ls')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市放可,隨后出現(xiàn)的幾起案子谒臼,更是在濱河造成了極大的恐慌,老刑警劉巖耀里,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜈缤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡冯挎,警方通過(guò)查閱死者的電腦和手機(jī)底哥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人趾徽,你說(shuō)我怎么就攤上這事续滋。” “怎么了孵奶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵疲酌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我了袁,道長(zhǎng)朗恳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任载绿,我火速辦了婚禮粥诫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崭庸。我一直安慰自己怀浆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布冀自。 她就那樣靜靜地躺著揉稚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熬粗。 梳的紋絲不亂的頭發(fā)上搀玖,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音驻呐,去河邊找鬼灌诅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛含末,可吹牛的內(nèi)容都是我干的猜拾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佣盒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挎袜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肥惭,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盯仪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蜜葱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體全景,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年牵囤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爸黄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞伟。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炕贵,靈堂內(nèi)的尸體忽然破棺而出梆奈,到底是詐尸還是另有隱情,我是刑警寧澤称开,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布鉴裹,位于F島的核電站,受9級(jí)特大地震影響钥弯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜督禽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一脆霎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狈惫,春花似錦睛蛛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至菱肖,卻和暖如春客冈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稳强。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工场仲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人退疫。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓渠缕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親褒繁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亦鳞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容