Laravel Envoy sẽ cung cấp một cú pháp rõ ràng và tối thiểu để định nghĩa các task phổ biến mà bạn hay chạy trên các server. Sử dụng cú pháp theo kiểu Blade, bạn có thể dễ dàng thiết lập các task để deploy, các lệnh Artisan và hơn thế nữa. Hiện tại, Envoy chỉ hỗ trợ trên hệ điều hành Mac và Linux.
Đầu tiên, cài đặt Envoy bằng lệnh Composer global require
:
composer global require laravel/envoy
Vì các thư viện Composer global đôi khi có thể gây ra xung đột phiên bản package, nên bạn có thể muốn xem xét sử dụng cgr
, đây là một thay thế cho lệnh composer global require
. Hướng dẫn cài đặt của thư viện cgr
này có thể được tìm thấy trên GitHub.
{note} Hãy đảm bảo là bạn đã set link của thư mục
~/.composer/vendor/bin
vào trong PATH của bạn để có thể chạy lệnhenvoy
trong terminal của bạn.
Bạn cũng có thể sử dụng Composer để cập nhật Envoy. Chạy lệnh composer global update
sẽ cập nhật tất cả các package Composer global đã được cài đặt trong máy của bạn:
composer global update
Tất cả các task Envoy của bạn phải được định nghĩa trong file Envoy.blade.php
ở trong thư mục gốc của project của bạn. Đây là một ví dụ để giúp bạn bắt đầu:
@servers(['web' => ['[email protected]']])
@task('foo', ['on' => 'web'])
ls -la
@endtask
Như bạn có thể thấy, một mảng @servers
sẽ được định nghĩa ở đầu file, cho phép bạn tham chiếu đến các server này trong tùy chọn on
trong task của bạn. Ở trong khai báo @task
của bạn, bạn nên viết các lệnh Bash code sẽ được chạy trên server của bạn khi tác vụ được thực thi.
Bạn có thể bắt buộc một tập lệnh phải chạy ở local bằng cách khai báo địa chỉ IP của server là 127.0.0.1
:
@servers(['localhost' => '127.0.0.1'])
Thỉnh thoảng, bạn có thể cần phải thực thi một số code PHP trước khi thực hiện các task của Envoy. Bạn có thể sử dụng lệnh @setup
để khai báo các biến và thực hiện các công việc chung khác của PHP trước khi bất kỳ task nào của bạn được thực thi:
@setup
$now = new DateTime();
$environment = isset($env) ? $env : "testing";
@endsetup
Nếu bạn cần thêm các file PHP khác trước khi task của bạn được thực thi, bạn có thể sử dụng lệnh @include
ở đầu file Envoy.blade.php
của bạn:
@include('vendor/autoload.php')
@task('foo')
# ...
@endtask
Nếu cần, bạn có thể truyền các giá trị tùy chọn vào các task của Envoy bằng lệnh:
envoy run deploy --branch=master
Bạn có thể truy cập đến các tùy chọn này trong task của bạn thông qua cú pháp "echo" của Blade. Tất nhiên, bạn cũng có thể sử dụng các câu lệnh if
và vòng lặp trong các task của bạn. Ví dụ, hãy kiểm tra sự tồn tại của biến $branch
trước khi thực hiện lệnh git pull
:
@servers(['web' => '192.168.1.1'])
@task('deploy', ['on' => 'web'])
cd site
@if ($branch)
git pull origin {{ $branch }}
@endif
php artisan migrate
@endtask
Stories group là một nhóm các task với một tên duy nhất, cho phép bạn nhóm các task nhỏ lại với nhau thành một task lớn. Chẳng hạn như, một story deploy
có thể chạy các task git
và composer
bằng cách liệt kê tên của các task trong định nghĩa của nó:
@servers(['web' => '192.168.1.1'])
@story('deploy')
git
composer
@endstory
@task('git')
git pull origin master
@endtask
@task('composer')
composer install
@endtask
Khi story đã được viết xong, bạn có thể chạy nó giống như chạy một task bình thường:
envoy run deploy
Envoy cho phép bạn dễ dàng chạy một task trên nhiều server. Đầu tiên, thêm các server vào khai báo @servers
của bạn. Mỗi server nên được gán với một tên duy nhất. Khi bạn đã định nghĩa xong các server cần thêm, bạn hãy liệt kê từng server vào trong mảng on
của task:
@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
Mặc định, các task sẽ được chạy tuần tự trên mỗi server. Nói cách khác, task sẽ kết thúc chạy trên server đầu tiên và sau đó nó tiến tục thực hiện trên server thứ hai. Nếu bạn muốn chạy song song một task trên nhiều server, hãy thêm tùy chọn parallel
vào khai báo task của bạn:
@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
Để chạy một task hoặc một story đã được định nghĩa trong file Envoy.blade.php
, bạn hãy chạy lệnh run
của Envoy, và truyền tên của task hoặc tên của story mà bạn muốn thực hiện. Envoy sẽ chạy task và hiển thị output từ server khi task được chạy:
envoy run task
Nếu bạn muốn được nhắc xác nhận trước khi chạy một task nào đó trên server của bạn, bạn nên thêm lệnh confirm
vào khai báo task của bạn. Tùy chọn này đặc biệt hữu ích khi chạy các hoạt động delete:
@task('deploy', ['on' => 'web', 'confirm' => true])
cd site
git pull origin {{ $branch }}
php artisan migrate
@endtask
Envoy cũng hỗ trợ gửi thông báo tới Slack sau khi mỗi task đã được chạy xong. Lệnh @slack
sẽ chấp nhận một URL hook của Slack và một tên channel. Bạn có thể lấy URL webhook của bạn bằng cách tạo một "Incoming WebHooks" ở trong bảng control panel của Slack. Bạn nên truyền toàn bộ URL webhook vào lệnh @slack
:
@finished
@slack('webhook-url', '#bots')
@endfinished
Bạn có thể cung cấp thêm một trong số lựa chọn sau đây để làm tham số cho channel:
#channel
@user
entry