Может войдёшь?
Черновики Написать статью Профиль

Инструмент запуска задач Envoy

перевод документация 5.х

  1. 1. Введение
    1. 1.1. Установка
  2. 2. Написание задач
    1. 2.1. Начальная настройка
    2. 2.2. Переменные
    3. 2.3. Группа Story
    4. 2.4. Макрос задач
    5. 2.5. Несколько серверов
  3. 3. Запуск задач
    1. 3.1. Запрос подтверждения перед запуском задач
  4. 4. Оповещения
    1. 4.1. Slack
    2. 4.2. HipChat
Этот перевод актуален для англоязычной документации на (ветка 5.3) , (ветка 5.2) , (ветка 5.1) и (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

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

Установка

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

shcomposer global require "laravel/envoy=~1.0"

Поскольку из-за глобальных библиотек Composer иногда могут возникать конфликты версий пакетов, вы можете использовать cgr, являющийся полноценной заменой для команды shcomposer global require. Инструкции по установке библиотеки cgr можно найти на GitHub.

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

Обновление Envoy

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

shcomposer global update
+ 5.0

добавлено в 5.0 ()

Для простого создания стаб-файла Envoy используйте команду shinit:

shenvoy init user@192.168.1.1

Написание задач

Все ваши Envoy-задачи должны быть определены в файле Envoy.blade.php в корне вашего проекта. Вот пример для начала:

PHP
@servers(['web' => ['user@192.168.1.1']])

@
task('foo', ['on' => 'web'])
  
ls -la
@endtask

Как видите, массив @servers определён в начале файла. Вы можете ссылаться на эти сервера в параметре on при объявлении задач. Поместите в ваши объявления @task тот Bash-код, который должен запускаться на сервере при исполнении задачи.

+ 5.3 5.2

добавлено в 5.3 () 5.2 ()

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

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

Начальная настройка

Иногда необходимо выполнить некий PHP-код перед выполнением ваших Envoy-задач. Для объявления переменных и выполнения других общих PHP-задач перед выполнением всех остальных ваших задач вы можете использовать директиву @setup:

PHP
@setup
  $now 
= new DateTime();

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

Если вам необходимо подключить другие PHP-файлы перед выполнением задачи, используйте директиву @include в начале файла Envoy.blade.php:

PHP
@include('vendor/autoload.php');

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

Переменные

При необходимости вы можете передать значения параметров в Envoy-задачи с помощью командной строки:

shenvoy run deploy --branch=master

Вы можете обращаться к параметрам в своих задачах с помощью Blade-синтаксиса «echo»:

PHP
@servers(['web' => '192.168.1.1'])

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

добавлено в 5.3 ()

Само собой, вы также можете использовать операторы PHPif и циклы в своих задачах. Например, давайте проверим наличие переменной PHP$branch перед выполнением команды shgit pull:

PHP
@servers(['web' => '192.168.1.1'])

@
task('deploy', ['on' => 'web'])
  
cd site

  
@if ($branch)
    
git pull origin {{ $branch }}
  @endif

  
php artisan migrate
@endtask

Группа Story

Группа Story — набор задач под единым удобным именем, который позволяет вам сгруппировать маленькие узконаправленные задачи в одну большую задачу. Например, группа deploy может запустить задачи git и composer, если указать имена этих задач в её описании:

PHP
@servers(['web' => '192.168.1.1'])

@
story('deploy')
  
git
  composer
@endstory

@task('git')
  
git pull origin master
@endtask

@task('composer')
  
composer install
@endtask

Теперь группа deploy может быть запущена как обычная задача:

shenvoy run deploy
+ 5.2 5.1 5.0

добавлено в 5.2 () 5.1 () 5.0 ()

Макрос задач

Макрос позволяет вам определить набор задач, которые будут запускаться последовательно с помощью одной команды. Например, макрос deploy может запустить задачи git и composer:

PHP
@servers(['web' => '192.168.1.1'])

@
macro('deploy')
  
git
  composer
@endmacro

@task('git')
  
git pull origin master
@endtask

@task('composer')
  
composer install
@endtask

Теперь макрос deploy может быть запущен одной простой командой:

shenvoy run deploy

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

Благодаря Envoy вы легко можете запускать задачи на нескольких серверах. Сначала добавьте дополнительные сервера в объявление @servers. Каждому серверу должно быть присвоено уникальное имя. Когда вы определили дополнительные сервера, перечислите каждый из них в массиве задачи on:

PHP
@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 в объявление задач:

PHP
@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-команду shrun вашего Envoy, передавая ей название задачи или группы задач для запуска. Envoy запустит задачу и выведет ответ от серверов, когда задача будет запущена:

shenvoy run task

Запрос подтверждения перед запуском задач

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

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

Оповещения

Slack

Envoy также поддерживает отправку оповещений в Slack после выполнения каждой команды.

+ 5.3

добавлено в 5.3 ()

Директива @slack принимает URL Slack-hook и название канала:

PHP
@finished
  
@slack('webhook-url''#bots')
@
endfinished
+ 5.2 5.1 5.0

добавлено в 5.2 () 5.1 () 5.0 ()

Директива @slack принимает URL Slack-hook, название канала и сообщение:

PHP
@after
  
@slack('hook''channel''message')
@
endafter

Вы можете получить URL вашего webhook, создав на сайте Slack интеграцию «Incoming WebHooks». Аргумент 'hook' должен содержать полный полученный URL вашего webhook. Например:

https://hooks.slack.com/services/ZZZZZZZZZ/YYYYYYYYY/XXXXXXXXXXXXXXX

А в качестве аргумента 'channel' может быть:

  • #channel — для отправки уведомлений на канале
  • @user — для отправки уведомлений пользователю
+ 5.2 5.1 5.0

добавлено в 5.2 () 5.1 () 5.0 ()

HipChat

Вы можете посылать оповещение в чат HipChat своей команды после запуска задачи с помощью простой директивы @hipchat. Директива принимает токен API, название чата, и имя отправителя сообщения:

PHP
@servers(['web' => '192.168.1.1'])

@
task('foo', ['on' => 'web'])
  
ls -la
@endtask

@after
  
@hipchat('token''room''Envoy')
@
endafter

Вы также можете задать своё собственное сообщение в чат HipChat, в котором можете использовать любые переменные, доступные вашим Envoy-задачам:

+ 5.2

добавлено в 5.2 ()

PHP
@after
  
@hipchat('token''room''Envoy'"$task ran in the $env environment.")
@
endafter
+ 5.1 5.0

добавлено в 5.1 () 5.0 ()

PHP
@after
  
@hipchat('token''room''Envoy'"{{ $task }} ran in the {{ $env }} environment.")
@
endafter

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.