Поддержите проект сделав пожертвование.
Ищете работу? Мы поможем!
Ищете работу? Мы поможем!

Инструмент запуска задач 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

Любое из нижеследующего можно предоставить в качестве аргумента канала:

- Для отправки уведомлений на канал: `#channel` - Для отправки уведомлений пользователю: `@user`