Инструмент запуска задач Envoy
11.x
.
Почему это важно?
Введение
Laravel Envoy обеспечивает чистый и минималистичный синтаксис для регистрации общих задач, запускаемых на удалённых серверах. Используя синтаксис в стиле Blade, вы легко можете настроить задачи для развёртывания, Artisan-команды и прочее. На данный момент Envoy работает только на ОС Mac/Linux.
Установка
Сначала установите Envoy с помощью команды Composer global require
:
composer global require laravel/envoy
Так как глобальные библиотеки Composer иногда могут стать причиной конфликтов версий пакетов, возможно вы захотите использовать cgr
, который представляет собой drop-in замену команды composer global require
. Инструкции по установке библиотеки cgr
можно найти на 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
Как видите, массив @servers
определён в начале файла. Вы можете ссылаться на эти сервера в параметре on
при объявлении задач. Поместите в ваши объявления @task
тот Bash-код, который будет запускаться на сервере при исполнении задачи.
Вы можете задать локальное выполнение скрипта, определив IP адрес сервера как 127.0.0.1
:
@servers(['localhost' => '127.0.0.1'])
Настройка
Иногда необходимо выполнить некий PHP-код перед тем, как задать параметры Envoy-задач. Для объявления переменных и выполнения общих PHP-задач в файле Envoy вы можете использовать директиву @setup
:
@setup
$now = new DateTime();
$environment = isset($env) ? $env : "testing";
@endsetup
Вля подключения любых PHP-файлов используйте директиву @include
поверх своего файла Envoy.blade.php
:
@include('vendor/autoload.php')
@task('foo')
# ...
@endtask
Переменные
При необходимости вы можете передать переменные в файл Envoy с помощью ключей командной строки, что позволяет вам настраивать ваши задачи:
envoy run deploy --branch=master
Доступ к настройкам в ваших задачах можно получить через синтаксис Blade “echo”. Конечно, вы также можете использовать операторы if
и замкнутые циклы в своих задачах. Например, давайте удостоверимся в присутствии переменной $branch
перед выполнением команды 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
Истории
Истории группируют набор задач под единым, удобным именем, позволяя вам группировать небольшие, сфокусированные задачи в более крупные задачи. Например, история deploy
может выполнить задачи git
и composer
перечислив имена задач в своем определении:
@servers(['web' => '192.168.1.1'])
@story('deploy')
git
composer
@endstory
@task('git')
git pull origin master
@endtask
@task('composer')
composer install
@endtask
Как только была написана история, вы можете просто выполнить ее как обыкновенную задачу:
envoy run deploy
Несколько серверов
Вы легко можете запускать задачи на нескольких серверах. Сначала добавьте дополнительные сервера в объявление @servers
. Каждому серверу должно быть присвоено уникальное имя. Когда вы определили дополнительные сервера, просто перечислите их в массиве объявления задачи 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
используйте команду run
вашего Envoy, передавая ей название задачи или макроса для запуска. 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 и имя канала. Вы можете получить свой вебхук-URL, создав интеграцию “Incoming WebHooks” в панели управления Slack. Следует передавать весь вебхук-URL в директиву @slack
:
@finished
@slack('webhook-url', '#bots')
@endfinished
Любое из нижеследующего можно предоставить в качестве аргумента канала: