Envoy 部署工具


##################################################################### # #簡介############安裝###################寫任務###########設定#########################設定## ##########變數############Stories#############多重服務模式########### #######執行任務############任務確認###################訊息通知######## #####Slack############Discord############################### ##

簡介

Laravel Envoy 為定義遠端伺服器的日常任務,提供了一套簡潔、輕量的語法。 Blade 風格語法即可實現部署任務的設定、Artisan 指令的執行等。目前,Envoy 僅支援 Mac 和 Linux 作業系統。 .

安裝

#首先,執行Composer 的global require 指令進行全域安裝Envoy :

composer global require laravel/envoy

由於全域Composer 函式庫有時會導致套件版本衝突,因此您可能想要考慮使用cgr ,它是composer global require 指令的直接替代品。 cgr 庫的安裝說明可參考found on GitHub.

確保將〜/ .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

如您所見,在文件頂部定義了一個@server 數組,允許您在任務聲明的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

Stories 將一組任務分組在一個方便的名稱下,讓您可以將小型,集中的任務分組到大型任務中。例如,deploy 故事可以透過在其定義中列出任務名稱來運行gitcomposer 任務:

@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

#多伺服器

Envoy 允許您輕鬆跨多個伺服器運行任務。首先,在 @server 宣告中新增其他伺服器。應為每個伺服器分配一個唯一的名稱。定義了其他伺服器後,列出任務的「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 檔案中定義的任務或故事,請執行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 鉤子 URL 和頻道名稱。您可以透過在 Slack 控制面板中建立 Incoming WebHooks 整合來檢索您的 webhook URL 。您應該將整個webhook URL 傳遞給@slack 指令:

@finished
    @slack('webhook-url', '#bots')
@endfinished

您可以提供以下其中一項作為頻道參數:

  • 給頻道傳送通知: #channel
  • 傳送通知給使用者: @user

######

Discord

Envoy 也支援在執行每項任務後向 Discord 發送通知。 @ discord 指令接受 Discord 鉤子 URL 和訊息。您可以透過在 Webhook 中建立 Webhook 並選擇 webhook 應發佈到哪個頻道來檢索您的 webhook URL。您應該將整個 Webhook URL 傳遞到 @ discord 指令:

@finished
    @discord('discord-webhook-url')
@endfinished
本文章首發在 LearnKu.com 網站上。