Envoy 部署工具
簡介
Laravel Envoy 為定義遠端伺服器的日常任務,提供了一套簡潔、輕量的語法。 Blade 風格語法即可實現部署任務的設定、Artisan 指令的執行等。目前,Envoy 僅支援 Mac 和 Linux 作業系統。 .
安裝
#首先,執行Composer 的global require
指令進行全域安裝Envoy :
composer global require laravel/envoy
由於全域Composer 函式庫有時會導致套件版本衝突,因此您可能想要考慮使用cgr
,它是composer global require
指令的直接替代品。 cgr
庫的安裝說明可參考found on GitHub.
確保將
〜/ .composer / vendor / bin
目錄放在PATH 中,以便在終端機中執行envoy
指令時找到envoy
執行檔。
更新 Envoy
您也可以使用 Composer 讓您的 Envoy 安裝保持最新。使用composer global update
指令將更新所有全域安裝的Composer 套件:
composer global update
寫任務
您的所有Envoy 任務都應該在專案根目錄中的Envoy.blade.php
檔案中定義。這是一個讓你入門的例子:
@servers(['web' => ['user@192.168.1.1']]) @task('foo', ['on' => 'web']) ls -la @endtask
如您所見,在文件頂部定義了一個@server
數組,允許您在任務聲明的on
選項中引用這些伺服器。在你的 @ task
宣告中,你應該放置在任務執行時應該在你的伺服器上執行的 Bash 程式碼。
您可以透過將伺服器的IP 位址指定為127.0.0.1
來強制腳本在本機上執行:
@servers(['localhost' => '127.0.0.1'])
設定
有時,您可能需要在執行Envoy 任務之前執行一些PHP 程式碼。您可以使用@ setup
指令聲明變量,並在執行任何其他任務之前執行其他常規PHP 工作:
@setup $now = new DateTime(); $environment = isset($env) ? $env : "testing"; @endsetup
如果在執行任務之前需要其他PHP 文件,可以在 Envoy.blade.php
檔案的頂部使用@include
指令:
@include('vendor/autoload.php') @task('foo') # ... @endtask##變數如果需要,您可以使用命令列將選項值傳遞到Envoy 任務:
envoy run deploy --branch=master您可以透過Blade 的「echo」 語法存取任務中的選項。您也可以在任務中使用
if 語句和迴圈。例如,在執行
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################################################ ##
Stories
Stories 將一組任務分組在一個方便的名稱下,讓您可以將小型,集中的任務分組到大型任務中。例如,deploy
故事可以透過在其定義中列出任務名稱來運行git
和composer
任務:
@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
#多伺服器
Envoy 允許您輕鬆跨多個伺服器運行任務。首先,在 @server
宣告中新增其他伺服器。應為每個伺服器分配一個唯一的名稱。定義了其他伺服器後,列出任務的「on」陣列中的每個伺服器:
@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
檔案中定義的任務或故事,請執行Envoy 的run
指令,傳遞您要執行的任務或故事的名稱。當任務執行時, Envoy 將執行任務並顯示伺服器的輸出:
envoy run task
任務確認
如果您希望在伺服器上執行給定任務之前提示您進行確認,則應將confirm
指令新增至任務聲明。此選項對於破壞性操作特別有用:
@task('deploy', ['on' => 'web', 'confirm' => true]) cd site git pull origin {{ $branch }} php artisan migrate @endtask
#訊息通知
#Slack
Envoy 也支援在執行每個任務後向Slack 發送通知。 @slack
指令接受 Slack 鉤子 URL 和頻道名稱。您可以透過在 Slack 控制面板中建立 Incoming WebHooks
整合來檢索您的 webhook URL 。您應該將整個webhook URL 傳遞給@slack
指令:
@finished @slack('webhook-url', '#bots') @endfinished
您可以提供以下其中一項作為頻道參數:
- 給頻道傳送通知:
#channel
- 傳送通知給使用者:
@user
Discord
Envoy 也支援在執行每項任務後向 Discord 發送通知。 @ discord
指令接受 Discord 鉤子 URL 和訊息。您可以透過在 Webhook
中建立 Webhook 並選擇 webhook 應發佈到哪個頻道來檢索您的 webhook URL。您應該將整個 Webhook URL 傳遞到 @ discord
指令:
@finished @discord('discord-webhook-url') @endfinished