Envoy 任務(wù)執(zhí)行器

2018-12-17 10:50 更新

簡(jiǎn)介

Laravel Envoy 提供了簡(jiǎn)潔、輕量的語法用于定義在遠(yuǎn)程服務(wù)器上可執(zhí)行的通用任務(wù)。通過 Blade 風(fēng)格的語法,你可以很容易地設(shè)置任務(wù)從而完成部署、執(zhí)行 Artisan 命令或其他更多工作。

注意: Envoy 依賴 PHP 5.4 或更高版本,并且只能運(yùn)行在 Mac / Linux 操作系統(tǒng)中。

           

安裝

首先,通過 Composer 的 global 命令來安裝 Envoy:

composer global require "laravel/envoy=~1.0"

           

請(qǐng)務(wù)必將 ~/.composer/vendor/bin 目錄加入到 PATH 環(huán)境變量中,這樣才能在命令行中執(zhí)行 envoy 命令時(shí)找到可執(zhí)行文件。

接下來,在項(xiàng)目的根目錄下創(chuàng)建 Envoy.blade.php 文件。下面給出的實(shí)例代碼你可以當(dāng)做模板使用:

@servers(['web' => '192.168.1.1'])@task('foo', ['on' => 'web'])
    ls -la
@endtask

           

如上所示,在文件的開頭首先定義了 @servers 數(shù)組。后續(xù)的任務(wù)聲明中,你可以在 on 選項(xiàng)中直接引用。在 @task 聲明里,你可以直接填寫需要在服務(wù)器上執(zhí)行的 Bash 腳本代碼。

init 命令可以很方便地用來創(chuàng)建一個(gè)包含基本內(nèi)容的 Envoy 文件:

envoy init user@192.168.1.1

           

           

執(zhí)行任務(wù)

使用 run 命令來執(zhí)行任務(wù):

envoy run foo

           

如有需要,你還可以通過命令行向 Envoy 文件傳遞參數(shù):

envoy run deploy --branch=master

           

你可以通過 Blade 語法引用這些參數(shù):

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

           

Bootstrapping

你可以在 @setup 指令中聲明變量,并在 Envoy 文件中執(zhí)行普通的 PHP 代碼:

@setup    $now = new DateTime();

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

           

還可以通過 @include 指令引入任意的 PHP 文件:

@include('vendor/autoload.php');

           

執(zhí)行任務(wù)前確認(rèn)

如果你想要在執(zhí)行指定的任務(wù)前有一個(gè)提示確認(rèn),可以使用 confirm 指令:

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

           

           

多服務(wù)器

在多臺(tái)服務(wù)器上執(zhí)行一個(gè)任務(wù)是非常簡(jiǎn)單的,只需在聲明任務(wù)時(shí)列出服務(wù)器名稱即可:

@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

           

默認(rèn)情況下,任務(wù)將以串行的方式依次在每臺(tái)服務(wù)器上執(zhí)行。也就是說,任務(wù)在第一臺(tái)服務(wù)器上執(zhí)行完成后才會(huì)切換到下一臺(tái)服務(wù)器上執(zhí)行。

           

并行執(zhí)行

如果你希望在多個(gè)服務(wù)器上并行執(zhí)行一個(gè)任務(wù),只需在任務(wù)聲明處添加 parallel 選項(xiàng)即可:

@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

           

           

任務(wù)宏

“宏”可以讓你只用一條命令就能順序執(zhí)行一組任務(wù)。例如:

@servers(['web' => '192.168.1.1'])@macro('deploy')
    foo
    bar
@endmacro

@task('foo')
    echo "HELLO"@endtask

@task('bar')
    echo "WORLD"@endtask

           

deploy 宏可以通過一條簡(jiǎn)單地命令啟動(dòng)并執(zhí)行:

envoy run deploy

           

                           

通知

HipChat

任務(wù)執(zhí)行完后,你可能希望發(fā)送一條通知信息到團(tuán)隊(duì)的 HipChat 聊天室,這一功能可以通過 @hipchat 指令實(shí)現(xiàn):

@servers(['web' => '192.168.1.1'])@task('foo', ['on' => 'web'])
    ls -la
@endtask

@after
    @hipchat('token', 'room', 'Envoy')@endafter

           

你還可以定制發(fā)送到 hipchat 聊天室的消息內(nèi)容。任何在 @setup 或通過 @include 引入的變量都可以在消息中直接引用:

@after
    @hipchat('token', 'room', 'Envoy', "$task ran on [$environment]")@endafter

           

Envoy 讓你的團(tuán)隊(duì)時(shí)刻掌握服務(wù)器上任務(wù)執(zhí)行的情況變得驚人的簡(jiǎn)單。

Slack

下面的代碼實(shí)例可以將通知發(fā)送到 Slack 聊天室:

@after
    @slack('hook', 'channel', 'message')@endafter

           

你可以通過在 Slack 官網(wǎng)創(chuàng)建一個(gè) Incoming WebHooks 集成來獲取 webhook 的地址。hook 參數(shù)應(yīng)該是由 Slack 的 Incoming Webhooks 集成提供的一個(gè)完整的 URL 地址,比如:

https://hooks.slack.com/services/ZZZZZZZZZ/YYYYYYYYY/XXXXXXXXXXXXXXX

           

你可以使用如下參數(shù)填入到 channel 參數(shù)中。

  • 發(fā)送通知給指定頻道: #channel

  • 發(fā)送通知給指定用戶: @user

如果沒有提供 channel 參數(shù),將會(huì)使用默認(rèn)的 channel。

注意: Slack 通知僅會(huì)在所有任務(wù)都成功完成后才會(huì)發(fā)送。

           

更新 Envoy

通過 Composer 來更新 Envoy:

composer global update


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)