W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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
使用 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
你可以在 @setup
指令中聲明變量,并在 Envoy 文件中執(zhí)行普通的 PHP 代碼:
@setup $now = new DateTime(); $environment = isset($env) ? $env : "testing";@endsetup
還可以通過 @include
指令引入任意的 PHP 文件:
@include('vendor/autoload.php');
如果你想要在執(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í)行一個任務,只需在任務聲明處添加 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
任務執(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í)行的情況變得驚人的簡單。
下面的代碼實例可以將通知發(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ā)送。
通過 Composer 來更新 Envoy:
composer global update
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: