:clap: 本系列持續更新中,歡迎關注:https://github.com/wi1dcard/laravel-deploy...。
由於課程上下文關聯比較緊密,在開始前請先閱讀 本文。
你的支援是我寫作的動力;關注我的客官們,請在右上角點個贊,將會讓文章在首頁展示,幫助更多人。
感謝 :clap: !
上一小節中,我們成功在本地全域性安裝了 Laravel Envoy;在這一小節,我將帶領大家初步嘗試使用 Envoy。
注意:本小節涉及命令均在本地執行。
編寫 Envoy.blade.php
與 Envoy 打交道,接觸最頻繁的當屬 Envoy.blade.php
檔案了。Envoy 將會按照該檔案內編寫的任務指令在遠端伺服器上執行。
提示:為方便描述,隨後課程中統稱它為「Envoy 檔案」。
首先,執行以下命令,Envoy 會為我們生成一個初始的模板:
$ envoy init laravel-deployment.wi1dcard.cn
請將 laravel-deployment.wi1dcard.cn
替換為你的伺服器公網 IP 或域名;開啟新建立的 Envoy 檔案,內容將會類似:
@servers(['web' => 'laravel-deployment.wi1dcard.cn'])
@task('deploy')
cd /path/to/site
git pull origin master
@endtask
可以看到,與 Blade 模板語法類似 —— 包含名為 @servers
和 @task
的兩條指令。其中:
@servers
指令帶有一陣列引數,用於定義遠端伺服器;由於我們需要使用之前建立的「部署專用使用者(deployer
)」,因此需要將其修改為:deployer@...
。@task
指令帶有一字串引數,用於定義任務名稱;你可以給它換個名字,例如update
。隨後的兩行(直到@endtask
)可用於定義該任務在伺服器上執行的命令。/path/to/site
需修改為伺服器中的站點根目錄,即/var/www/deployment
。
經過一番修改後,結果如下:
@servers(['web' => 'deployer@laravel-deployment.wi1dcard.cn'])
@task('update')
cd /var/www/deployment
git pull origin master
@endtask
別忘記儲存。接下來,在命令列內執行以下命令:
$ envoy run update
你將會看到類似這樣的輸出:
[deployer@laravel-deployment.wi1dcard.cn]: From github.com:wi1dcard/hello-deployment
[deployer@laravel-deployment.wi1dcard.cn]: * branch master -> FETCH_HEAD
[deployer@laravel-deployment.wi1dcard.cn]: Already up-to-date.
是的,Envoy 自動登入到遠端伺服器、執行了 update
任務內定義的命令,並將輸出展示在了你面前。
提示:由於先前小節我們配置了金鑰登入,因而此時無需輸入密碼,十分方便。
任務執行前確認
部分關鍵任務可能具備一定「破壞性」,例如 php artisan migrate
等;為了防止手滑,需要確認無誤後再開始執行。
而 @task
指令支援第二個引數,可用於配置一些選項。例如,我們修改 Envoy 檔案,將 confirm
設定為 true
:
@task('update', ['confirm' => true])
再次執行 envoy run update
命令,將會出現以下提示:
Are you sure you want to run the [update] task? [y/N]:
提示:有沒有覺得神似 Laravel Console 內常用的
$input->confirm()
方法?
意為詢問你是否確認執行 update
任務;一如先前小節所提到的,預設選項為 N
(不執行),輸入 y
即執行。