Laravel Envoy 優(yōu)雅的SSH遠程任務執(zhí)行工具

前言

最近公司開發(fā)框架由Thinkphp換成了Laravel局蚀,每次項目更新上線挽放,都會先更新代碼泡嘴,再執(zhí)行命令來確保項目運行:

  • 登錄服務器趾痘,打開命令行;
  • 進入項目所在文件夾(項目根目錄)cd /innfotech/www/xxx/ ;
  • 把本地代碼更新為最新的 svn up;
  • 然后再執(zhí)行一些命令:composer的,artisan的等

剛開始榛斯,手動做這些事情观游,覺得還行,久而久之, 會覺得這種方式太過麻煩驮俗,比較繁瑣懂缕,還容易出現(xiàn)失誤。所以針對這個問題王凑,打算找一個解決方案搪柑。

Laravel Envoy 就是我找到解決方案

Laravel Envoy 為定義在遠程服務器上運行的通用任務提供了一種簡潔、輕便的語法索烹。它使用了 Blade 風格的語法逆巍,讓你可以很方便的啟動任務來進行項目部署胧弛、Artisan 命令運行等操作。目前,Envoy 只支持 Mac 及 Linux 操作系統(tǒng)栋猖。

TA 允許你通過最少的配置, 只需要在本地的命令行下執(zhí)行如下的一行命令:envoy run deploy奋隶,就可以把上面所有的事情都做了童漩。

話不多說荣恐,下面開始介紹 Laravel Envoy的安裝和使用!

安裝

Laravel Envoy Github地址:https://github.com/laravel/envoy

Laravel Envoy 的運行需要 PHP 5.4 以上, 使用 Composer Global 安裝:

安裝composer

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

//將Composer配置給所有用戶
composer global require "laravel/installer"

安裝 Laravel Envoy

composer global require "laravel/envoy=~1.0"
微信截圖_20190123164325.png

注意: 需要把 ~/.composer/vendor/bin 放到你的 PATH 里面

//將bin放入當前用戶Path
echo 'export PATH=$PATH:/root/.composer/vendor/bin' >> ~/.bashrc
//導入求类,免登出
source ~/.bashrc
//添加larvel執(zhí)行權限
chmod +x /root/.composer/vendor/laravel/installer/laravel
//添加envoy執(zhí)行權限
chomp +x /root/.composer/vendor/laravel/envoy/envoy

注意:

這里需要proc_open支持所以你查看是否支持

/usr/local/php/etc/php.ini
//刪除
disable_functions中
proc_open proc_status

安裝完成后測試

? envoy --version
Laravel Envoy version 1.0.16

以后要更新的話, 只需要執(zhí)行以下

composer global update 

簡單使用

1.初始化并創(chuàng)建 deploy 任務

首先, 在你的 項目 跟目錄下, 執(zhí)行以下命令進行初始化

? envoy init vagrant@192.168.1.1(服務器IP)
Envoy file created!
微信截圖_20190123164309.png

上面的命令會在此文件夾下生成一個 Envoy.blade.php 的文件, 內容如下

@servers(['web' => 'vagrant@192.168.1.1'])

@task('deploy')
    <!--需要執(zhí)行的命令-->
    cd /innfotech/www/xxx
    svn up
    composer update
    composer dump-autoload
    php artisan cache:clear
    php artisan migrate--seed
@endtask

Envoy.blade.php的語法很簡單:

@servers 的數(shù)組被定義在文件的起始位置處奔垦,讓你在聲明任務時可以在 on 選項里參照使用這些服務器。`

@task聲明里仑嗅,你可以放置當任務運行時想要在遠程服務器運行的 Bash 命令宴倍。

微信截圖_20190123164336.png

然后運行命令:envoy run deploy就可以了

高級使用

你可以通過指定服務器的 IP 地址為 127.0.0.1 來執(zhí)行本地任務:(目前张症,Envoy 只支持 Mac和Linux環(huán)境 )

@servers(['localhost' => '127.0.0.1'])

任務啟動

有時,你可能想在任務啟動前運行一些 PHP 代碼鸵贬。這時可以使用 @setup 區(qū)塊在 Envoy 文件中聲明變量以及運行普通的 PHP 程序:

@setup
    $now = new DateTime();

    $environment = isset($env) ? $env : "testing";
@endsetup

如果你想在任務執(zhí)行前引入其他 PHP 文件俗他,可以直接在 Envoy.blade.php 文件起始位置使用 @include

@include('vendor/autoload.php')

@task('foo')
    # ...
@endtask

任務變量

如果需要的話,你也可以通過命令行選項來傳遞變量至 Envoy 文件阔逼,以便自定義你的任務:

envoy run deploy --branch=master

你可以通過 Blade 的「echo」語法使用這些選項兆衅, 當然也能在任務里用「if」 和循環(huán)操作。舉例來說嗜浮,我們在執(zhí)行 git pull 命令前羡亩,先檢查 $branch 變量是否存在:

@servers(['web' => '192.168.1.1'])

@task('deploy', ['on' => 'web'])
    cd site

    @if ($branch)
        git pull origin {{ $branch }}
    @endif

    php artisan migrate
@endtask

任務宏

任務宏通過一個統(tǒng)一的、便捷的名字來劃分一組任務危融,來讓你把小而專的子任務合并到大的任務里畏铆。比如說,一個名為deploy 的任務宏可以在它定義范圍內列出子任務名字 gitcomposer 來運行各自對應的任務:

@servers(['web' => '192.168.1.1'])

@story('deploy')
    git
    composer
@endstory

@task('git')
    git pull origin master
@endtask

@task('composer')
    composer install
@endtask

當 story 寫好后吉殃,像運行普通任務一樣運行它就好了:

envoy run deploy

多個服務器

你可以在多個服務器上運行任務辞居。首先,增加額外的服務器至你的 @servers 聲明蛋勺,每個服務器必須分配一個唯一的名稱瓦灶。一旦你定義好其它服務器,就能夠在任務聲明的 on 數(shù)組中列出這些服務器:

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2']])
    cd site
    git pull origin {{ $branch }}
    php artisan migrate
@endtask

并行運行

默認情況下抱完,任務會按照順序在每個服務器上運行贼陶。這意味著任務會在第一個服務器運行完后才跳到第二個。如果你想在多個服務器上并行運行任務巧娱,只需簡單的在任務聲明里加上 parallel 選項即可:

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2'], 'parallel' => true])
    cd site
    git pull origin {{ $branch }}
    php artisan migrate
@endtask

運行任務

要想運行一個在 Envoy.blade.php 文件中定義好的任務或者宏碉怔,就執(zhí)行 Envoy 的 run 命令,并將這個任務的名字傳遞給它家卖。Envoy 會去執(zhí)行這個任務并且把任務執(zhí)行過程中的輸出給打印出來:

envoy run task

任務確認

如果你想要在運行任務之前進行提示確認眨层,則可以增加 confirm 命令到任務聲明庙楚。這個選項對于破壞性的操作來說是相當有用的:

@task('deploy', ['on' => 'web', 'confirm' => true])
    cd site
    git pull origin {{ $branch }}
    php artisan migrate
@endtask

通知

Slack

slack.jpg

Envoy 也支持任務執(zhí)行完畢后發(fā)送通知至 Slack上荡。@slack 命令接收 Slack hook 網(wǎng)址和頻道名稱。你可以通在在 Slack 的控制面板上創(chuàng)建 「Incoming WebHooks」 時來檢索 webhook 網(wǎng)址馒闷。webhook-url 參數(shù)必須是 @slack 的 Incoming WebHooks 所提供的完整網(wǎng)址:

@finished
    @slack('webhook-url', '#bots')
@endfinished

你可以選擇下方的任意一個來作為 channel 參數(shù):

  • 如果要發(fā)送通知至一個頻道: #channel
  • 如果要發(fā)送通知給一位用戶: @user
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末酪捡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纳账,更是在濱河造成了極大的恐慌逛薇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疏虫,死亡現(xiàn)場離奇詭異永罚,居然都是意外死亡啤呼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門呢袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來官扣,“玉大人,你說我怎么就攤上這事羞福√杼悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵治专,是天一觀的道長卖陵。 經(jīng)常有香客問我,道長张峰,這世上最難降的妖魔是什么泪蔫? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮喘批,結果婚禮上鸥滨,老公的妹妹穿的比我還像新娘。我一直安慰自己谤祖,他們只是感情好婿滓,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粥喜,像睡著了一般凸主。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上额湘,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天卿吐,我揣著相機與錄音,去河邊找鬼锋华。 笑死嗡官,一個胖子當著我的面吹牛,可吹牛的內容都是我干的毯焕。 我是一名探鬼主播衍腥,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纳猫!你這毒婦竟也來了婆咸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芜辕,失蹤者是張志新(化名)和其女友劉穎尚骄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侵续,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡倔丈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年憨闰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片需五。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡起趾,死狀恐怖,靈堂內的尸體忽然破棺而出警儒,到底是詐尸還是另有隱情训裆,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布蜀铲,位于F島的核電站边琉,受9級特大地震影響,放射性物質發(fā)生泄漏记劝。R本人自食惡果不足惜变姨,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厌丑。 院中可真熱鬧定欧,春花似錦、人聲如沸怒竿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耕驰。三九已至爷辱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朦肘,已是汗流浹背饭弓。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留媒抠,地道東北人弟断。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像趴生,于是被迫代替她去往敵國和親阀趴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容