Laravel Envoy は、リモートサーバー上での一般的なタスクの定義と実行のためのミニで簡潔な構文を提供します。 Blade 構文スタイルを使用すると、デプロイメントやアーティザン コマンドなどのタスクを簡単に設定できます。現在、Envoy は Mac と Linux オペレーティング システムのみをサポートしています。
まず、Composer のグローバル コマンドを使用して Envoy をインストールする必要があります:
composer global require "laravel/envoy=~1.0"
~/.composer/vendor/bin ディレクトリーがが PATH に追加されるため、ターミナルの使用時に envoy コマンドを直接使用できるようになります。
Envoy を更新
Composer を使用して Envoy を最新の状態に保つことができます:
composer global update
すべての Envoy タスクは次のようにする必要がありますプロジェクトのルート ディレクトリにある Envoy.blade.php ファイルで定義されます。簡単な例を次に示します。
@servers(['web' => 'user@192.168.1.1'])@task('foo', ['on' => 'web']) ls -al@endtask
ご覧のとおり、@servers ディレクティブはファイルの先頭で定義されており、サーバーのリストを含む配列が含まれています。 @task ディレクティブはタスクを定義するために使用されます。配列にはタスク名と配列パラメータが含まれ、その値はタスクが実行されるサーバーです。 @servers ディレクティブ リスト。 @task ディレクティブ内に Bash コードを配置する必要があります。このコードは、タスクの実行時にリモート サーバーに渡されます。
ローカル タスク
サーバーをローカルとして指定してローカル タスクを実行できます:
@servers(['localhost' => '127.0.0.1'])
ブート
場合によっては、Envoy タスクを実行する前に特定の PHP 操作を実行する必要がある場合があります。 @setup ディレクティブを使用して変数を宣言でき、PHP を使用してその内部で作業できます:
@setup $now = new DateTime(); $environment = isset($env) ? $env : "testing";@endsetup
また、@include ディレクティブを使用して外部 PHP ファイルを含めることもできます:
@include('vendor/autoload.php')
タスクの確認
リモートサーバーが特定のタスクを実行する前にプロンプトを表示したい場合は、タスク定義に確認ディレクティブを追加できます:
@task('deploy', ['on' => 'web', 'confirm' => true]) cd site git pull origin {{ $branch }} php artisan migrate@endtask
必要に応じて、コマンド ライン スイッチを使用して 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
複数のサーバーにわたってタスクを簡単に実行できます。まず、@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
デフォルトでは、タスクはサーバー間で連続して実行されます。これは、現在のサーバーのタスクが完了した後にのみ、次のサーバーのタスクが実行されることを意味します。
並列実行
サーバー間でタスクを並列実行する場合。タスク ディレクティブに並列オプションを追加できます。
@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
タスク マクロを使用すると、一連のタスクを順番に実行するコマンドを定義できます。たとえば、git タスクとコンポーザー タスクを実行するデプロイ マクロを定義します。
@servers(['web' => '192.168.1.1'])@macro('deploy') git composer@endmacro@task('git') git pull origin master@endtask@task('composer') composer install@endtask
マクロを定義すると、1 つのコマンドで複数のタスクを実行できます。
envoy run deploy
Envoy.blade.php ファイルで定義されたタスクを実行するには、Envoy の run コマンドを使用する必要があります。タスク名またはマクロ名をコマンドに渡すことができます。 Envoy はタスクを実行し、サーバー実行の出力を同期して表示します:
envoy run task
後でメッセージを送信するには @hipchat コマンドを使用できます。タスクの実行が完了すると、メッセージがチームの HipChat ルームに通知されます。このコマンドは、メッセージに示されている API トークン、ルーム名、送信者のユーザー名を受け取ります:
@servers(['web' => '192.168.1.1'])@task('foo', ['on' => 'web']) ls -al@endtask@after @hipchat('token', 'room', 'Envoy')@endafter
必要に応じて、カスタム メッセージを HipChat ルームに送信することもできます。メッセージを作成するとき、タスクで使用できる変数もメッセージ内で使用できます:
@after @hipchat('token', 'room', 'Envoy', "$task ran in the $env environment.")@endafter
HipChat に加えて、Envoy は Slack への通知の送信もサポートしています。 @slack コマンドは、Slack フック URL、チャネル名、および送信する必要があるメッセージのコンテンツを受け取ります:
@after @slack('hook', 'channel', 'message')@endafter
Slack の Web サイトで Incoming WebHook を作成することで Webhook URL を取得できます。フック パラメーターは、次のような完全な Webhook URL である必要があります:
https://hooks.slack.com/services/ZZZZZZZZZ/YYYYYYYYY/XXXXXXXXXXXXXXX
次のいずれかのパラメーターをチャネルとして指定できます: