Envoy 任務執(zhí)行器

2018-12-17 10:50 更新

簡介

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

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

           

安裝

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

composer global require "laravel/envoy=~1.0"

           

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

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

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

           

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

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

envoy init user@192.168.1.1

           

           

執(zhí)行任務

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

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í)行任務前確認

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

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

           

           

多服務器

在多臺服務器上執(zhí)行一個任務是非常簡單的,只需在聲明任務時列出服務器名稱即可:

@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

           

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

           

并行執(zhí)行

如果你希望在多個服務器上并行執(zhí)行一個任務,只需在任務聲明處添加 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

           

           

任務宏

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

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

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

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

           

deploy 宏可以通過一條簡單地命令啟動并執(zhí)行:

envoy run deploy

           

                           

通知

HipChat

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

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

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

           

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

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

           

Envoy 讓你的團隊時刻掌握服務器上任務執(zhí)行的情況變得驚人的簡單。

Slack

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

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

           

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

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

           

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

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

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

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

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

           

更新 Envoy

通過 Composer 來更新 Envoy:

composer global update


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號