Unetway

Laravel - Envoy

Вступление

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

 

Установка

Сначала установите Envoy с помощью команды Composer :global require

composer global require laravel/envoy

Поскольку глобальные библиотеки Composer могут иногда вызывать конфликты версий пакетов, вы можете рассмотреть возможность их использования cgr, что является заменой команды. В инструкции по установке библиотеки можно найти на GitHub .composer global requirecgr

Обязательно поместите каталог в PATH, чтобы найти исполняемый файл при запуске команды в вашем терминале.~/.composer/vendor/binenvoyenvoy

Обновление посланника

Вы также можете использовать Composer, чтобы обновлять установку Envoy. Выполнение команды обновит все ваши глобально установленные пакеты Composer:composer global update

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. Вы можете использовать @setupдирективу для объявления переменных и выполнения другой общей работы PHP перед выполнением любой из ваших других задач:

@setup
    $now = new DateTime();

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

Если перед выполнением задачи вам потребуются другие файлы PHP, вы можете использовать директиву вверху файла:@includeEnvoy.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

 

Несколько серверов

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 , передав имя задачи или истории, которую вы хотите выполнить. Envoy запустит задачу и отобразит вывод с серверов во время выполнения задачи:Envoy.blade.phprun

envoy run deploy

 

Подтверждение выполнения задачи

Если вы хотели бы получить запрос на подтверждение перед запуском данной задачи на своих серверах, вы должны добавить confirmдирективу в декларацию вашей задачи. Эта опция особенно полезна для разрушительных операций:

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

 

Уведомления

Слабина

Envoy также поддерживает отправку уведомлений в Slack после выполнения каждой задачи. @slackДиректива принимает слабину URL крюка и название канала. Вы можете получить URL своего веб-крючка, создав интеграцию «Входящие веб-крючки» в своей панели управления Slack. Вы должны передать весь URL-адрес webhook в @slackдирективу:

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

В качестве аргумента канала вы можете указать одно из следующих:

  • Чтобы отправить уведомление на канал: #channel
  • Чтобы отправить уведомление пользователю: @user

Диссонанс

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

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