鍍金池/ 教程/ PHP/ Envoy 任務運行器(SSH任務)
門面
Laravel Homestead
安裝及配置
測試
HTTP 中間件
加密
升級指南
幫助函數(shù)
應用目錄結(jié)構(gòu)
集合
新手入門指南-簡單任務管理系統(tǒng)
任務調(diào)度
查詢構(gòu)建器
視圖
驗證
Laravel Cashier(訂購&支付&發(fā)票)
本地化
隊列
調(diào)整器
分頁
文件系統(tǒng)/云存儲
貢獻代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請求
Laravel Elixir
發(fā)行版本說明
Envoy 任務運行器(SSH任務)
序列化
Session
起步
帶用戶功能的任務管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務提供者
Blade 模板引擎
包開發(fā)
用戶認證
Artisan 控制臺
HTTP 響應
集合
服務容器
關(guān)聯(lián)關(guān)系
一次請求的生命周期
契約
Redis
錯誤&日志

Envoy 任務運行器(SSH任務)

1、簡介

Laravel Envoy 為定義運行在遠程主機上的通用任務提供了一套干凈、最簡化的語法。使用 Blade 樣式語法,你可以輕松為開發(fā)設(shè)置任務,Artisan 命令,以及更多,目前,Envoy 只支持 Mac 和 Linux 操作系統(tǒng)。

1.1 安裝

首先,使用 Composer 的 global 命令安裝 Envoy:

composer global require "laravel/envoy=~1.0"

確保~/.composer/vendor/bin 目錄在系統(tǒng)路徑 PATH 中否則在終端中由于找不到 envoy 而無法執(zhí)行該命令。

1.1.1 更新 Envoy

還可以使用 Composer 保持安裝的 Envoy 是最新版本:

composer global update

2、編寫任務

所有的 Envoy 任務都定義在項目根目錄下的 Envoy.blade.php文件中,下面是一個讓你開始的示例:

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

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

正如你所看到的,@servers 數(shù)組定義在文件頂部,從而允許你在任務聲明中使用 on選項引用這些服務器,在@task 聲明中,應該放置將要在服務器上運行的 Bash 代碼。

啟動 有時候,你需要在評估 Envoy 任務之前執(zhí)行一些 PHP 代碼,可以在 Envoy 文件中使用@setup 指令來聲明變量和要執(zhí)行的 PHP 代碼:

@setup
    $now = new DateTime();
    $environment = isset($env) ? $env : "testing";
@endsetup

還可以使用@include 來引入外部 PHP 文件:

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

確認任務 如果你想要在服務器上運行給定任務之前彈出彈出提示進行確認,可以在任務聲明中使用 confirm指令:

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

2.1 任務變量

如果需要的話,你可以使用命令行開關(guān)傳遞變量到 Envoy 文件,從而允許你自定義任務:

envoy run deploy --branch=master

你可以在任務中通過 Blade 的“echo”語法使用該選項:

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

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

2.2 多個服務器

你可以輕松地在多主機上運行同一個任務,首先,添加額外服務器到@servers 聲明,每個服務器應該被指配一個唯一的名字。定義好服務器后,在任務聲明中簡單列出所有服務器即可:

@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í)行,這意味著,該任務在第一臺服務器上運行完成后才會開始在第二臺服務器運行。

2.2.1 平行運行

如果你想要在多個服務器上平行運行,添加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

2.3 任務宏

宏允許你使用單個命令中定義多個依次運行的任務。例如,deploy宏會運行 git 和 composer 任務:

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

@macro('deploy')
    git
    composer
@endmacro

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

@task('composer')
    composer install
@endtask

宏被定義好了之后,你就可以通過如下單個命令運行它:

envoy run deploy

3、運行任務

要從 Envoy.blade.php 文件中運行一個任務,需要執(zhí)行 Envoy 的run 命令,然后傳遞你要執(zhí)行的任務的命令名或宏。Envoy 將會運行命令并從服務打印輸出:

envoy run task

4、通知

4.1 HipChat

運行完一個任務后,可以使用 Envoy 的@hipchat 指令發(fā)送通知到團隊的 HipChat 房間,該指令接收一個 API 令牌、房間名稱、和用戶名:

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

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

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

需要的話,你還可以傳遞自定義發(fā)送給 HipChat 房間的消息,所有在 Envoy 任務中有效的變量在構(gòu)建消息時也有效:

@after
    @hipchat('token', 'room', 'Envoy', "{$task} ran in the {$env} environment.")
@endafter

4.2 Slack

除了 HipChat 之外,Envoy 還支持發(fā)送通知到Slack。@slack 指令接收一個 Slack 鉤子 URL、頻道名稱、和你要發(fā)送給該頻道的消息:

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

你可以通過創(chuàng)建集成到 Slack 網(wǎng)站的 Incoming WebHooks 來獲取鉤子 URL,該 hook 參數(shù)是由 Incoming Webhooks Slack 集成提供的完整 webhook URL,例如:

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

你可以提供下面兩種其中之一作為頻道參數(shù):

  • 發(fā)送消息到頻道: #channel
  • 發(fā)送消息到用戶: @user
上一篇:包開發(fā)下一篇:Laravel Homestead