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

Envoy 任务运行器

介绍

Laravel Envoy 提供了一种简洁、最小的语法,用于定义在远程服务器上运行的常见任务。使用 Blade 风格的语法,您可以轻松设置部署、Artisan 命令等任务。

NOTE

Envoy 需要 PHP 版本 5.4 或更高版本,并且仅在 Mac / Linux 操作系统上运行。

安装

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

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

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

接下来,在项目的根目录中创建一个 Envoy.blade.php 文件。以下是一个示例:

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

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

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

可以使用 init 命令轻松创建一个 Envoy 文件的模板:

php
envoy init user@192.168.1.1

运行任务

要运行任务,请使用 Envoy 安装的 run 命令:

php
envoy run foo

如果需要,您可以使用命令行开关将变量传递到 Envoy 文件中:

php
envoy run deploy --branch=master

您可以使用您习惯的 Blade 语法选项:

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

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

引导

您可以使用 @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

多服务器

您可以轻松地在多个服务器上运行任务。只需在任务声明中列出服务器:

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

任务宏

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

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

@macro('deploy')
	foo
	bar
@endmacro

@task('foo')
	echo "HELLO"
@endtask

@task('bar')
	echo "WORLD"
@endtask

现在可以通过一个简单的命令运行 deploy 宏:

php
envoy run deploy

通知

HipChat

运行任务后,您可以使用简单的 @hipchat 指令向团队的 HipChat 房间发送通知:

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

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

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

您还可以向 hipchat 房间指定自定义消息。在 @setup 中声明的任何变量或使用 @include 包含的变量都可以在消息中使用:

php
@after
	@hipchat('token', 'room', 'Envoy', "$task ran on [$environment]")
@endafter

这是一种让您的团队了解服务器上运行的任务的极其简单的方法。

Slack

可以使用以下语法向 Slack 发送通知:

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 参数提供以下之一:

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

如果未提供 channel 参数,将使用默认频道。

注意:只有在所有任务成功完成后才会发送 Slack 通知。

更新 Envoy

要更新 Envoy,只需使用 Composer:

php
composer global update