鍍金池/ 教程/ PHP/ Envoy 任務(wù)執(zhí)行器
Laravel Cashier
Eloquent ORM
HTTP 響應(yīng)
發(fā)行說(shuō)明
擴(kuò)展包開發(fā)
HTTP 控制器
事件
擴(kuò)展框架
Contracts
開發(fā)
配置
表單驗(yàn)證
錯(cuò)誤與日志
Hashing
貢獻(xiàn)指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級(jí)向?qū)?/span>
概覽
緩存
服務(wù)提供者
Envoy 任務(wù)執(zhí)行器
隊(duì)列
單元測(cè)試
服務(wù)容器
文件系統(tǒng) / 云存儲(chǔ)
認(rèn)證
請(qǐng)求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁(yè)
輔助方法
應(yīng)用程序結(jié)構(gòu)
HTTP 路由
HTTP 請(qǐng)求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

Envoy 任務(wù)執(zhí)行器

簡(jiǎn)介

Laravel Envoy 提供了簡(jiǎn)潔、輕量的語(yǔ)法用于定義在遠(yuǎn)程服務(wù)器上可執(zhí)行的通用任務(wù)。通過(guò) Blade 風(fēng)格的語(yǔ)法,你可以很容易地設(shè)置任務(wù)從而完成部署、執(zhí)行 Artisan 命令或其他更多工作。

注意: Envoy 依賴 PHP 5.4 或更高版本,并且只能運(yùn)行在 Mac / Linux 操作系統(tǒng)中。

安裝

首先,通過(guò) Composer 的 global 命令來(lái)安裝 Envoy:

    composer global require "laravel/envoy=~1.0"

請(qǐng)務(wù)必將 ~/.composer/vendor/bin 目錄加入到 PATH 環(huán)境變量中,這樣才能在命令行中執(zhí)行 envoy 命令時(shí)找到可執(zhí)行文件。

接下來(lái),在項(xiàng)目的根目錄下創(chuàng)建 Envoy.blade.php 文件。下面給出的實(shí)例代碼你可以當(dāng)做模板使用:

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

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

如上所示,在文件的開頭首先定義了 @servers 數(shù)組。后續(xù)的任務(wù)聲明中,你可以在 on 選項(xiàng)中直接引用。在 @task 聲明里,你可以直接填寫需要在服務(wù)器上執(zhí)行的 Bash 腳本代碼。

init 命令可以很方便地用來(lái)創(chuàng)建一個(gè)包含基本內(nèi)容的 Envoy 文件:

    envoy init user@192.168.1.1

執(zhí)行任務(wù)

使用 run 命令來(lái)執(zhí)行任務(wù):

    envoy run foo

如有需要,你還可以通過(guò)命令行向 Envoy 文件傳遞參數(shù):

    envoy run deploy --branch=master

你可以通過(guò) Blade 語(yǔ)法引用這些參數(shù):

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

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

Bootstrapping

你可以在 @setup 指令中聲明變量,并在 Envoy 文件中執(zhí)行普通的 PHP 代碼:

    @setup
        $now = new DateTime();

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

還可以通過(guò) @include 指令引入任意的 PHP 文件:

    @include('vendor/autoload.php');

多服務(wù)器

在多臺(tái)服務(wù)器上執(zhí)行一個(gè)任務(wù)是非常簡(jiǎn)單的,只需在聲明任務(wù)時(shí)列出服務(wù)器名稱即可:

    @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

默認(rèn)情況下,任務(wù)將以串行的方式依次在每臺(tái)服務(wù)器上執(zhí)行。也就是說(shuō),任務(wù)在第一臺(tái)服務(wù)器上執(zhí)行完成后才會(huì)切換到下一臺(tái)服務(wù)器上執(zhí)行。

并行執(zhí)行

如果你希望在多個(gè)服務(wù)器上并行執(zhí)行一個(gè)任務(wù),只需在任務(wù)聲明處添加 parallel 選項(xiàng)即可:

    @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

任務(wù)宏

"宏"可以讓你只用一條命令就能順序執(zhí)行一組任務(wù)。例如:

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

    @macro('deploy')
        foo
        bar
    @endmacro

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

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

`deploy` 宏可以通過(guò)一條簡(jiǎn)單地命令啟動(dòng)并執(zhí)行:

    envoy run deploy

通知

HipChat

任務(wù)執(zhí)行完后,你可能希望發(fā)送一條通知信息到團(tuán)隊(duì)的 HipChat 聊天室,這一功能可以通過(guò) @hipchat 指令實(shí)現(xiàn):

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

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

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

你還可以定制發(fā)送到 hipchat 聊天室的消息內(nèi)容。任何在 @setup 或通過(guò) @include 引入的變量都可以在消息中直接引用:

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

Envoy 讓你的團(tuán)隊(duì)時(shí)刻掌握服務(wù)器上任務(wù)執(zhí)行的情況變得驚人的簡(jiǎn)單。

Slack

下面的代碼實(shí)例可以將通知發(fā)送到 Slack 聊天室:

    @after
        @slack('team', 'token', 'channel')
    @endafter

更新 Envoy

通過(guò) Composer 來(lái)更新 Envoy:

    composer global update
上一篇:Command Bus下一篇:服務(wù)容器