laravel 基础教程 —— SSH 任务

Envoy 任务运行器

简介

Laravel Envoy 为远端服务器常用任务的定义与执行提供了迷你简洁的语法。你可以通过使用 Blade 语法样式轻松的为部署,Artisan 命令等设置任务。目前,Envoy 只支持 Mac 和 Linux 操作系统。

安装

首先,你需要通过 Composer 的 global 命令来安装 Envoy:

composer global require "laravel/envoy=~1.0"

你需要确保 ~/.composer/vendor/bin 目录被加入到你的 PATH 中,这样才能使你在使用终端时可以直接使用 envoy 命令。

更新 Envoy

你可以使用 Composer 来维持 Envoy 的更新:

composer global update

编写任务

所有的 Envoy 任务应该被定义在你项目的根目录下的 Envoy.blade.php 文件中。这里有一个简单的示例:

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

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

就如你所看到的,@servers 指令被定义在文件的头部,并且包含一个数组,数组中包含服务器的列表。@task 指令用来定义任务,它包含一个任务名称,和一个数组参数,数组中包含一个 on 键,它的值就是任务所要执行的服务器,它应该是 @servers 指令列表中的一个或多个。你应该在 @task 指令的内部放置 Bash 代码,这些代码会在任务执行时传递给所要执行的远端服务器。

本地任务

你可以指定服务器为本地来执行本地的任务:

@servers(['localhost' => '127.0.0.1'])

引导

有时候,你可能希望在执行 Envoy 任务之前先执行某些 PHP 操作。你可以使用 @setup 指令来声明变量,并且你可以在其内部使用 PHP 来工作:

@setup
  $now = new DateTime();

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

你也可以使用 @include 指令来引入任意的外部 PHP 文件:

@include('vendor/autoload.php')

确认任务

如果你希望在远端服务器执行所给定任务之前先进行提示,你可以在你的任务定义时添加 confirm 指令:

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

任务变量

如果你需要的话,你可以使用命令行开关来传递变量到 Envoy 任务中,这允许你定制化你的任务:

envoy run deploy --branch=master

你可以在你的任务中通过 Blade 的 echo 语法使用该选项:

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

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

多个服务器

你可以轻松的跨多个服务器执行任务。首先,你需要在 @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

默认的,任务会在服务器间串行执行,这意味着只有在当前服务器执行任务完成之后才会执行下一个服务器的任务。

平行执行

如果你希望跨服务器平行执行任务。你可以在任务指令中添加 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

任务宏

任务宏允许你定义一个命令来顺序的执行一组任务。举个实例,我们定义一个 deploy 宏来执行 gitcomposer 任务:

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

@macro('deploy')
  git
  composer
@endmacro

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

@task('composer')
  composer install
@endtask

一旦你定义完成了宏,你就可以通过一条命令来运行多个任务:

envoy run deploy

运行任务

你需要使用 Envoy 的 run 命令来执行 Envoy.blade.php 文件中所定义的任务。你可以传递一个任务的名称或者宏名称到命令中。Envoy 会执行任务并同步显示服务器执行的输出:

envoy run task

通知

HipChat

你可以使用 @hipchat 指令来在任务执行完成之后,发送一个消息通知到团队的 HipChat 房间中。这个指令接收一个 API token,房间的名称和消息中所显示的发送者的用户名:

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

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

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

如果你需要,你也可以发送自定义的消息到 HipChat 房间。构建消息时,任务可用的变量在消息中也是可用的:

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

Slack

除了 HipChat 之外,Envoy 也支持向 Slack 中发送通知。@slack 指令接收一个 Slack hook URL,一个频道名称,和你需要发送的消息内容:

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

你可以通过在 Slack 的网站上创建一个 Incoming WebHooks 来获取 webhook URL。hook 参数应该是一个完整的 webhook URL,比如:

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

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

  • #channel 发送通知到频道
  • @user 发送通知到用户
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容