laravel 基礎(chǔ)教程 —— SSH 任務(wù)

Envoy 任務(wù)運(yùn)行器

簡(jiǎn)介

Laravel Envoy 為遠(yuǎn)端服務(wù)器常用任務(wù)的定義與執(zhí)行提供了迷你簡(jiǎn)潔的語(yǔ)法。你可以通過使用 Blade 語(yǔ)法樣式輕松的為部署,Artisan 命令等設(shè)置任務(wù)。目前,Envoy 只支持 Mac 和 Linux 操作系統(tǒng)。

安裝

首先,你需要通過 Composer 的 global 命令來安裝 Envoy:

composer global require "laravel/envoy=~1.0"

你需要確保 ~/.composer/vendor/bin 目錄被加入到你的 PATH 中,這樣才能使你在使用終端時(shí)可以直接使用 envoy 命令。

更新 Envoy

你可以使用 Composer 來維持 Envoy 的更新:

composer global update

編寫任務(wù)

所有的 Envoy 任務(wù)應(yīng)該被定義在你項(xiàng)目的根目錄下的 Envoy.blade.php 文件中。這里有一個(gè)簡(jiǎn)單的示例:

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

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

就如你所看到的,@servers 指令被定義在文件的頭部,并且包含一個(gè)數(shù)組,數(shù)組中包含服務(wù)器的列表。@task 指令用來定義任務(wù),它包含一個(gè)任務(wù)名稱,和一個(gè)數(shù)組參數(shù),數(shù)組中包含一個(gè) on 鍵,它的值就是任務(wù)所要執(zhí)行的服務(wù)器,它應(yīng)該是 @servers 指令列表中的一個(gè)或多個(gè)。你應(yīng)該在 @task 指令的內(nèi)部放置 Bash 代碼,這些代碼會(huì)在任務(wù)執(zhí)行時(shí)傳遞給所要執(zhí)行的遠(yuǎn)端服務(wù)器。

本地任務(wù)

你可以指定服務(wù)器為本地來執(zhí)行本地的任務(wù):

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

引導(dǎo)

有時(shí)候,你可能希望在執(zhí)行 Envoy 任務(wù)之前先執(zhí)行某些 PHP 操作。你可以使用 @setup 指令來聲明變量,并且你可以在其內(nèi)部使用 PHP 來工作:

@setup
  $now = new DateTime();

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

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

@include('vendor/autoload.php')

確認(rèn)任務(wù)

如果你希望在遠(yuǎn)端服務(wù)器執(zhí)行所給定任務(wù)之前先進(jìn)行提示,你可以在你的任務(wù)定義時(shí)添加 confirm 指令:

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

任務(wù)變量

如果你需要的話,你可以使用命令行開關(guān)來傳遞變量到 Envoy 任務(wù)中,這允許你定制化你的任務(wù):

envoy run deploy --branch=master

你可以在你的任務(wù)中通過 Blade 的 echo 語(yǔ)法使用該選項(xiàng):

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

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

多個(gè)服務(wù)器

你可以輕松的跨多個(gè)服務(wù)器執(zhí)行任務(wù)。首先,你需要在 @servers 指令中添加額外的服務(wù)器。每個(gè)服務(wù)器應(yīng)該被分配一個(gè)唯一的名字。當(dāng)你添加完額外的服務(wù)器之后,你需要在待執(zhí)行的任務(wù)指令中使用數(shù)組 on 鍵來列出待執(zhí)行的服務(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

默認(rèn)的,任務(wù)會(huì)在服務(wù)器間串行執(zhí)行,這意味著只有在當(dāng)前服務(wù)器執(zhí)行任務(wù)完成之后才會(huì)執(zhí)行下一個(gè)服務(wù)器的任務(wù)。

平行執(zhí)行

如果你希望跨服務(wù)器平行執(zhí)行任務(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ù)宏

任務(wù)宏允許你定義一個(gè)命令來順序的執(zhí)行一組任務(wù)。舉個(gè)實(shí)例,我們定義一個(gè) deploy 宏來執(zhí)行 gitcomposer 任務(wù):

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

@macro('deploy')
  git
  composer
@endmacro

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

@task('composer')
  composer install
@endtask

一旦你定義完成了宏,你就可以通過一條命令來運(yùn)行多個(gè)任務(wù):

envoy run deploy

運(yùn)行任務(wù)

你需要使用 Envoy 的 run 命令來執(zhí)行 Envoy.blade.php 文件中所定義的任務(wù)。你可以傳遞一個(gè)任務(wù)的名稱或者宏名稱到命令中。Envoy 會(huì)執(zhí)行任務(wù)并同步顯示服務(wù)器執(zhí)行的輸出:

envoy run task

通知

HipChat

你可以使用 @hipchat 指令來在任務(wù)執(zhí)行完成之后,發(fā)送一個(gè)消息通知到團(tuán)隊(duì)的 HipChat 房間中。這個(gè)指令接收一個(gè) API token,房間的名稱和消息中所顯示的發(fā)送者的用戶名:

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

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

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

如果你需要,你也可以發(fā)送自定義的消息到 HipChat 房間。構(gòu)建消息時(shí),任務(wù)可用的變量在消息中也是可用的:

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

Slack

除了 HipChat 之外,Envoy 也支持向 Slack 中發(fā)送通知。@slack 指令接收一個(gè) Slack hook URL,一個(gè)頻道名稱,和你需要發(fā)送的消息內(nèi)容:

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

你可以通過在 Slack 的網(wǎng)站上創(chuàng)建一個(gè) Incoming WebHooks 來獲取 webhook URL。hook 參數(shù)應(yīng)該是一個(gè)完整的 webhook URL,比如:

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

你可以提供以下作為頻道的參數(shù)之一:

  • #channel 發(fā)送通知到頻道
  • @user 發(fā)送通知到用戶
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評(píng)論 6 342
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,832評(píng)論 9 468
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,355評(píng)論 2 33
  • “去大草原的湖邊,等候鳥飛回來,等我們都長(zhǎng)大了就生一個(gè)娃娃,他會(huì)自己長(zhǎng)大遠(yuǎn)去,我們也各自遠(yuǎn)去……”歌手譚維維唱到了...
    幾吸幾呼閱讀 158評(píng)論 0 0

友情鏈接更多精彩內(nèi)容