Версія фреймворка: 8.x

Envoy Laravel

Вступ

Envoy Laravelзабезпечує чіткий мінімальний синтаксис для визначення загальних завдань, які ви запускаєте на віддалених серверах. Використовуючи синтаксис стилю Blade, ви можете легко налаштувати завдання для розгортання, команди Artisan тощо. В даний час Envoy підтримує лише операційні системи Mac і Linux.

Встановлення

Спочатку встановіть Envoy за допомогою Composerglobal requireкоманди:

composer global require laravel/envoy

Оскільки глобальні бібліотеки Composer іноді можуть спричиняти конфлікти версій пакетів, ви можете розглянути можливість використанняcgr, що є заміною дляcomposer global requireкоманди.cgrінструкції з встановлення бібліотеки можна знайтина GitHub.

Обов’язково розмістіть$HOME/.config/composer/vendor/binабо$HOME/.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 опцію декларацій ваших завдань.@servers декларація повинна бути завжди розміщена в одному рядку. В межах @task декларації, вам слід розмістити код Bash, який повинен працювати на вашому сервері під час виконання завдання.

Ви можете змусити скрипт запускатися локально, вказавши IP-адресу сервера як127.0.0.1:

@servers(['localhost' => '127.0.0.1'])

Налаштування

Іноді вам може знадобитися виконати якийсь PHP-код перед виконанням завдань Envoy. Ви можете використовувати@setupдирективу для оголошення змінних та виконання інших загальних PHP-робіт перед виконанням будь-яких інших ваших завдань:

@setup
    $now = new DateTime();

    $environment = isset($env) ? $env : "testing";
@endsetup

Якщо вам потрібно підключити інші файли PHP перед тим, як ваше завдання буде виконано, ви можете використовувати @include директиву у верхній частині вашого Envoy.blade.php файлу:

@include('vendor/autoload.php')

@task('foo')
    # ...
@endtask

Ви також можете імпортувати інші файли Envoy, щоб їх історії та завдання були додані до ваших. Після їх імпортування ви можете виконувати завдання у цих файлах так, ніби вони були визначені у вашому власному. Ви повинні використовувати @import директиву у верхній частині вашогоEnvoy.blade.php файлу:

@import('package/Envoy.blade.php')

Змінні

За потреби ви можете передавати значення параметрів у завдання 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

Історії

Історії групують набір завдань під єдиною зручною назвою, що дозволяє згрупувати невеликі цілеспрямовані завдання у великі завдання. Наприклад, adeployісторія може запускати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

Кілька серверів

Envoy дозволяє легко запускати завдання на декількох серверах. Спочатку додайте додаткові сервери до вашого@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файл, виконайте Envoy'srunкоманда, передаючи назву завдання або історії, яку ви хотіли б виконати. Envoy запустить завдання та відобразить вихідні дані із серверів під час виконання завдання:

envoy run deploy

Підтвердження виконання завдання

Якщо ви хочете отримати запит на підтвердження перед запуском заданого завдання на своїх серверах, вам слід додати файлconfirmдирективу до оголошення вашого завдання. Цей параметр особливо корисний для руйнівних операцій:

@task('deploy', ['on' => 'web', 'confirm' => true])
    cd site
    git pull origin {{ $branch }}
    php artisan migrate
@endtask

Повідомлення

Slack

Envoy також підтримує надсилання повідомлень доSlackпісля виконання кожного завдання.@slackдиректива приймає URL-адресу підключення Slack та назву каналу. Ви можете отримати URL-адресу веб-хука, створивши інтеграцію "Вхідні веб-хуки" на панелі керування Slack. Вам слід передати всю URL-адресу веб-хука в@slackдиректива:

@finished
    @slack('webhook-url', '#bots')
@endfinished

В якості аргументу каналу ви можете вказати одне з наступного:

  • To send the notification to a channel: #channel
  • To send the notification to a user: @user

Discord

Envoy також підтримує надсилання повідомлень доDiscordпісля виконання кожного завдання.@discordдиректива приймає URL-адресу та повідомлення про перехід Discord. Ви можете отримати URL-адресу веб-хука, створивши "Веб-хук" у налаштуваннях сервера та вибравши, на якому каналі веб-хук повинен розміщувати повідомлення. Вам слід передати всю URL-адресу Webhook в@discordдирективу:

@finished
    @discord('discord-webhook-url')
@endfinished

Telegram

Envoy також підтримує надсилання повідомлень доTelegramпісля виконання кожного завдання.@telegramдиректива приймає ідентифікатор бота Telegram та чат IF. Ви можете отримати свій ідентифікатор бота, створивши нового бота за допомогоюBotFather. Ви можете отримати дійсний ідентифікатор чату за допомогою@username_to_id_bot. Ви повинні передати весь ідентифікатор бота та ідентифікатор чату в@telegramдирективу:

@finished
    @telegram('<bot-id>','<chat-id>')
@endfinished