Инструмент запуска задач Envoy
12.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
Любое из нижеследующего можно предоставить в качестве аргумента канала:
- Для отправки уведомлений на канал:
#channel - Для отправки уведомлений пользователю:
@user