Envoy 部署工具
Envoy 部署工具
Laravel Envoy
簡介
Laravel Envoy 為定義遠(yuǎn)程服務(wù)器的日常任務(wù),提供了一套簡潔、輕量的語法。Blade 風(fēng)格語法即可實(shí)現(xiàn)部署任務(wù)的配置、Artisan 命令的執(zhí)行等。目前,Envoy 僅支持 Mac 和 Linux 操作系統(tǒng)。.
安裝
首先,運(yùn)行 Composer 的 global require
命令進(jìn)行全局安裝 Envoy:
composer global require laravel/envoy
由于全局 Composer 庫有時(shí)會(huì)導(dǎo)致包版本沖突,因此您可能希望考慮使用 cgr
,它是 composer global require
命令的直接替代品。 cgr
庫的安裝說明可參閱 found on GitHub.
確保將
?/ .composer / vendor / bin
目錄放在 PATH 中,以便在終端中運(yùn)行envoy
命令時(shí)找到envoy
可執(zhí)行文件。
更新 Envoy
您也可以使用 Composer 使您的 Envoy 安裝保持最新。 使用 composer global update
命令將更新所有全局安裝的 Composer 包:
composer global update
編寫任務(wù)
您的所有 Envoy 任務(wù)都應(yīng)該在項(xiàng)目根目錄中的 Envoy.blade.php
文件中定義。 這是一個(gè)讓你入門的例子:
@servers(['web' => ['user@192.168.1.1']]) @task('foo', ['on' => 'web']) ls -la @endtask
如您所見,在文件頂部定義了一個(gè) @server
數(shù)組,允許您在任務(wù)聲明的 on
選項(xiàng)中引用這些服務(wù)器。 在你的 @ task
聲明中,你應(yīng)該放置在任務(wù)執(zhí)行時(shí)應(yīng)該在你的服務(wù)器上運(yùn)行的 Bash 代碼。
您可以通過將服務(wù)器的 IP 地址指定為 127.0.0.1
來強(qiáng)制腳本在本地運(yùn)行:
@servers(['localhost' => '127.0.0.1'])
配置
有時(shí),您可能需要在執(zhí)行 Envoy 任務(wù)之前執(zhí)行一些 PHP 代碼。 您可以使用 @ setup
指令聲明變量,并在執(zhí)行任何其他任務(wù)之前執(zhí)行其他常規(guī) PHP 工作:
@setup $now = new DateTime(); $environment = isset($env) ? $env : "testing"; @endsetup
如果在執(zhí)行任務(wù)之前需要其他 PHP 文件,可以在 Envoy.blade.php
文件的頂部使用 @include
指令:
@include('vendor/autoload.php') @task('foo') # ... @endtask
變量
如果需要,您可以使用命令行將選項(xiàng)值傳遞到 Envoy 任務(wù):
envoy run deploy --branch=master
您可以通過 Blade 的「echo」 語法訪問任務(wù)中的選項(xiàng)。 您也可以在任務(wù)中使用 if
語句和循環(huán)。 例如,在執(zhí)行 git pull
命令之前,讓我們驗(yàn)證 $ 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 將一組任務(wù)分組在一個(gè)方便的名稱下,允許您將小型,集中的任務(wù)分組到大型任務(wù)中。 例如, deploy
故事可以通過在其定義中列出任務(wù)名稱來運(yùn)行 git
和 composer
任務(wù):
@servers(['web' => '192.168.1.1']) @story('deploy') git composer @endstory @task('git') git pull origin master @endtask @task('composer') composer install @endtask
一旦編寫了 story ,你可以像一個(gè)典型的任務(wù)一樣運(yùn)行它:
envoy run deploy
多服務(wù)器
Envoy 允許您輕松跨多個(gè)服務(wù)器運(yùn)行任務(wù)。 首先,在 @server
聲明中添加其他服務(wù)器。 應(yīng)為每個(gè)服務(wù)器分配一個(gè)唯一的名稱。 定義了其他服務(wù)器后,列出任務(wù)的「on」數(shù)組中的每個(gè)服務(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
并行運(yùn)行
默認(rèn)情況下,將在每個(gè)服務(wù)器上串行執(zhí)行任務(wù)。 換句話說,任務(wù)將在繼續(xù)在第二臺(tái)服務(wù)器上執(zhí)行之前在第一臺(tái)服務(wù)器上完成運(yùn)行。 如果您想并行運(yùn)行多個(gè)服務(wù)器上的任務(wù),請?jiān)谌蝿?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
運(yùn)行任務(wù)
要運(yùn)行在 Envoy.blade.php
文件中定義的任務(wù)或故事,請執(zhí)行 Envoy 的 run
命令,傳遞您要執(zhí)行的任務(wù)或故事的名稱。 當(dāng)任務(wù)運(yùn)行時(shí), Envoy 將運(yùn)行任務(wù)并顯示服務(wù)器的輸出:
envoy run task
任務(wù)確認(rèn)
如果您希望在服務(wù)器上運(yùn)行給定任務(wù)之前提示您進(jìn)行確認(rèn),則應(yīng)將 confirm
指令添加到任務(wù)聲明中。 此選項(xiàng)對(duì)于破壞性操作特別有用:
@task('deploy', ['on' => 'web', 'confirm' => true]) cd site git pull origin {{ $branch }} php artisan migrate @endtask
消息通知
Slack
Envoy 還支持在執(zhí)行每個(gè)任務(wù)后向 Slack 發(fā)送通知。 @slack
指令接受 Slack 鉤子 URL 和通道名稱。 您可以通過在 Slack 控制面板中創(chuàng)建 Incoming WebHooks
集成來檢索您的 webhook URL 。 您應(yīng)該將整個(gè) webhook URL 傳遞給 @slack
指令:
@finished @slack('webhook-url', '#bots') @endfinished
您可以提供以下其中一項(xiàng)作為頻道參數(shù):
- 給頻道發(fā)送通知:
#channel
- 給用戶發(fā)送通知:
@user
Discord
Envoy 還支持在執(zhí)行每項(xiàng)任務(wù)后向 Discord 發(fā)送通知。 @ discord
指令接受 Discord 鉤子 URL 和消息。 您可以通過在 Webhook
中創(chuàng)建 Webhook 并選擇 webhook 應(yīng)發(fā)布到哪個(gè)頻道來檢索您的 webhook URL。 您應(yīng)該將整個(gè) Webhook URL 傳遞到 @ discord
指令:
@finished @discord('discord-webhook-url') @endfinished