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

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

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

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

Введение

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

Установка

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

shcomposer global require "laravel/envoy=~1.0"

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

Обновление Envoy

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

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.2

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

Локальные задачи

Вы можете задать локальное выполнение скрипта, определив локальный хост в качестве сервера:

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

Автозагрузка

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

PHP
@setup
  $now 
= new DateTime();

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

А для подключения любых PHP-файлов используйте директиву @include:

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

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

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

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

Переменные задач

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

shenvoy run deploy --branch=master

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

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

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

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

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

Макрос задач

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

shenvoy run task

Оповещения

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

Slack

Кроме HipChat Envoy также поддерживает отправку оповещений в Slack. Директива @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 — для отправки уведомлений пользователю

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

Разметка: ? ?

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