Envoy 部署工具

更新时间: 2019-07-31 20:15

简介

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
Cyberwar

Cyberwar

Kathleen Hall Jamieson / Oxford University Press / 2018-10-3 / USD 16.96

The question of how Donald Trump won the 2016 election looms over his presidency. In particular, were the 78,000 voters who gave him an Electoral College victory affected by the Russian trolls and hac......一起来看看 《Cyberwar》 这本书的介绍吧!

URL 编码/解码

URL 编码/解码

URL 编码/解码

UNIX 时间戳转换

UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具

HEX HSV 转换工具

HEX HSV 互换工具