Skip to content
虚位以待
虚位以待
赞助商
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

Envoy 任务运行器

介绍

Laravel Envoy 提供了一种简洁、最小化的语法,用于定义在远程服务器上运行的常见任务。使用 Blade 风格的语法,您可以轻松设置部署任务、Artisan 命令等。目前,Envoy 仅支持 Mac 和 Linux 操作系统。

安装

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

php
composer global require "laravel/envoy=~1.0"

确保将 ~/.composer/vendor/bin 目录放入您的 PATH 中,以便在终端中运行 envoy 命令时可以找到 envoy 可执行文件。

更新 Envoy

您也可以使用 Composer 来保持 Envoy 安装的最新状态:

php
composer global update

编写任务

所有的 Envoy 任务都应该定义在项目根目录的 Envoy.blade.php 文件中。以下是一个示例:

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

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

如您所见,文件顶部定义了一个 @servers 数组,允许您在任务声明的 on 选项中引用这些服务器。在 @task 声明中,您应该放置将在任务执行时在服务器上运行的 Bash 代码。

引导

有时,您可能需要在评估 Envoy 任务之前执行一些 PHP 代码。您可以使用 @setup 指令在 Envoy 文件中声明变量并进行一般的 PHP 工作:

php
@setup
    $now = new DateTime();

    $environment = isset($env) ? $env : "testing";
@endsetup

您还可以使用 @include 来包含任何外部 PHP 文件:

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

确认任务

如果您希望在服务器上运行给定任务之前提示确认,您可以在任务声明中添加 confirm 指令:

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

任务变量

如果需要,您可以使用命令行开关将变量传递到 Envoy 文件中,从而自定义您的任务:

php
envoy run deploy --branch=master

您可以通过 Blade 的 "echo" 语法在任务中使用这些选项:

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

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

多服务器

您可以轻松地在多个服务器上运行任务。首先,将其他服务器添加到 @servers 声明中。每个服务器都应分配一个唯一的名称。一旦定义了其他服务器,只需在任务声明的 on 数组中列出这些服务器:

php
@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 选项:

php
@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

任务宏

宏允许您使用单个命令定义一组按顺序运行的任务。例如,一个 deploy 宏可以运行 gitcomposer 任务:

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

@macro('deploy')
    git
    composer
@endmacro

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

@task('composer')
    composer install
@endtask

一旦定义了宏,您可以通过一个简单的命令运行它:

php
envoy run deploy

运行任务

要从 Envoy.blade.php 文件中运行任务,请执行 Envoy 的 run 命令,并传递您希望执行的任务或宏的名称。Envoy 将运行任务并在任务运行时显示来自服务器的输出:

php
envoy run task

通知

HipChat

运行任务后,您可以使用 Envoy 的 @hipchat 指令向团队的 HipChat 房间发送通知。该指令接受一个 API 令牌、房间名称和要显示为消息发送者的用户名:

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

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

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

如果愿意,您还可以传递自定义消息发送到 HipChat 房间。构建消息时,Envoy 任务中可用的任何变量也将可用:

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

Slack

除了 HipChat,Envoy 还支持向 Slack 发送通知。@slack 指令接受一个 Slack 钩子 URL、频道名称和您希望发送到频道的消息:

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

您可以通过在 Slack 网站上创建一个 Incoming WebHooks 集成来获取您的 webhook URL。hook 参数应为由 Incoming Webhooks Slack 集成提供的完整 webhook URL。例如:

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

您可以提供以下之一作为频道参数:

  • 发送通知到频道:#channel
  • 发送通知到用户:@user