[ Laravel 5.3 文档 ] 官方包 —— Envoy Task Runner

   2016-10-17 0
核心提示:1、简介Laravel Envoy为运行在远程主机上的通用任务定义提供了一套干净的、最简化的语法。使用Blade风格语法,你可以轻松为开发设置任务,Artisan命令,以及更多,目前,Envoy只支持 Mac 和 Linux 操作系统。安装首先,使用 Composer 的global命令安装 Envoy

1、简介

Laravel Envoy 为运行在远程主机上的通用任务定义提供了一套干净的、最简化的语法。使用Blade风格语法,你可以轻松为开发设置任务,Artisan命令,以及更多,目前,Envoy只支持 Mac 和 Linux 操作系统。

安装

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

composer global require "laravel/envoy=~1.0"

由于全局的Composer库有时候会导致包版本冲突,所以需要考虑使用cgr,该命令是composer global require命令的替代实现,cgr库的安装指南可以在 GitHub 上找到。

注:确保 ~/.composer/vendor/bin 目录已经在系统路径PATH中,否则在终端中由于找不到 envoy 而无法执行该命令。

更新Envoy

还可以使用 Composer 保持安装的 Envoy 是最新版本,因为 composer global update 命令将会更新所有全局安装的Composer包:

composer global update

2、编写任务

所有的 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代码,可以在Envoy文件中使用 @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

Story

story通过一个便捷的名字对任务集合进行分组,从而允许你将小而专注的任务组合成大的任务,例如, deploy story将会通过在其定义中罗列任务名的方式运行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

3、运行任务

要运行一个在 Envoy.blade.php 文件中定义的任务,需要执行Envoy的 run 命令,然后传递你要执行的任务或story的名字。Envoy将会运行命令并从服务打印输出:

envoy run task

确认任务执行

如果你想要在服务器上运行给定任务之前弹出弹出提示进行确认,可以在任务声明中使用 confirm 指令:

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

4、通知

Slack

Envoy还支持在任务执行之后发送通知到 Slack@slack 指令接收一个Slack钩子URL和频道名称,你可以通过在Slack控制面板中创建“Incoming WebHooks”集成来获取webhook URL,需要传递完整的webhook URL到 @slack 指令:

@after
    @slack('webhook-url', '#bots')
@endafter

你可以提供下面两种其中之一作为频道参数:

  • 发送通知到频道:  #channel
  • 发送通知到用户:  @user
 
标签: Laravel Composer
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • nginx 各类网站设置 (laravel , thinkphp , nod
    基础部分设置[root@centos ~]# vim /opt/nginx/conf/nginx.confuser www www;worker_processes auto;pid logs/nginx.pid;worker_rlimit_nofile 100000;events {use epoll;multi_accept on;worker_connections 65535 ;}http {include mime.types;default_type
    02-09
  • PHP trait 特性在 Laravel 中的使用个人心得
    trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 laravel 的使用请参看 Laravel 在哪些地方用了 trait?我曾在 Laravel 中大型项目面向
    02-09
  • 让我们用 laravel-mix 为 TypeScript 和 Sass
    介绍前端编译TypeScript、Sass、模板引擎等时经常用到Gulp和webpack。这是我个人的印象,但它们似乎都难以管理,因为它们的描述往往复杂而冗长。我不想积极进行,因为我要担心加载器的顺序并且有很多配置选项,我必须花时间去了解它们。我想推荐那里laravel
  • PHP Laravel软删除的实现方法介绍
    用Laravel 自带的 Eloquent ORM 来实现软删除。首先在数据迁移文件中添加删除时间字段./database/migrations/2014_10_12_000000_create_users_table.php?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illu
  • Laravel中如何使用PHP的装饰器模式 php laravel
    本文小编为大家详细介绍“Laravel中如何使用PHP的装饰器模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel中如何使用PHP的装饰器模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。装饰器模式定义:它可以帮助您在
    02-08 laravelphp
  • PHP laravel使用自定义邮件类实现发送邮件
    PHP laravel使用自定义邮件类实现发送邮件
    当登录邮箱为腾讯企业邮箱的时候。Phpmailer发送邮件就不好用了,具体哪里不好用,我没真没找到。但是,邮件得发啊,怎么办呢?我这里搞了一个自定义的发送邮件类,腾讯企业邮箱也可用。但是,邮件发送失败,不会返回报错信息,这个可能是有点坑。源码如下:?
  • 详解PHP laravel中的加密与解密函数
    目录一:简介二:配置三:使用加密/解密1:加密2:不使用序列化进行加密3:解密Laravel为我们提供了完整的加密方法及加密模式。我之前一般在加密的时候使用的是我自己写的加密函数,但是这个玩意,有的位置还是不太使用,当然,破解的话,基本上也是不可能的
  • PHP laravel缓存cache机制详解
    目录一、访问多个缓存存储二、从缓存中获取数据1.获取数据并设置默认值2.检查缓存项是否存在3.数值增加/减少4.获取存储5.获取删除三、缓存中存储数据1.获取存储数据2.缓存不存在时存储数据3.永久存储数据四、从缓存中移除数据Laravel中的cache为我们提供了三
  • PHP laravel实现导出PDF功能
    PHP laravel实现导出PDF功能
    目录一、laravel-tcpdf二、tcpdf三、TCPDF解决保存中文文件名的方法补充一、laravel-tcpdf导出PDF文件Laravel框架为我们集成了一个插件tcpdf。下载地址:https://github.com/elibyy/tcpdf-laravel然后使用composer进行安装就可以了。具体安装过程,请查看文末
  • PHP laravel缓存cache机制怎么实现
    今天小编给大家分享一下PHP laravel缓存cache机制怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Laravel中的cache为我们
点击排行