Envoy 部署工具
简介
Laravel Envoy 为定义远程服务器的日常任务,提供了一套简洁、轻量的语法。Blade 风格语法即可实现部署任务的配置、Artisan 命令的执行等。目前,Envoy 仅支持 Mac 和 Linux 操作系统。.
安装
首先,运行 Composer 的 global require 命令进行全局安装 Envoy:
composer global require laravel/envoy
Composer 的全局库出现版本冲突时,不妨考虑使用cgr,它是 composer global require 命令的替代实现。cgr 库的安装信息可参阅 GitHub。
{note} 务必把
~/.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
你会注意到,@servers 的数组里的服务器,可以在任务声明里被 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
Story 通过唯一、便捷的名字组合一系列任务,从而把小而专的任务聚到一起。例如,一个 deploy story 要运行 git 和 composer 两个任务,可以在其定义时列出任务 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
多服务器
多服务器运行任务也非难事。先要在 @servers 声明中添加服务器,且服务器名唯一。定义好服务器后,在任务 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 文件的任务或 story 通过执行 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 hook URL 和一个频道名。在 Slack 的控制面版创建的「Incoming WebHooks」集成就能找到 webhook URL。应把整个 webhook URL 传入 @slack 指令:
@finished
@slack('webhook-url', '#bots')
@endfinished
可以选择以下任一作为频道参数:
- 给频道发送通知:
#channel - 给用户发送通知:
@user
点击查看所有 Laravel 中文文档 文章: https://www.codercto.com/courses/l/3.html
The Black Box Society
Frank Pasquale / Harvard University Press / 2015-1-5 / USD 35.00
Every day, corporations are connecting the dots about our personal behavior—silently scrutinizing clues left behind by our work habits and Internet use. The data compiled and portraits created are inc......一起来看看 《The Black Box Society》 这本书的介绍吧!