Агрегация drush-алиасов

Опубликовал Максим Баев, 17 мая 2017, 16:55

drushКто-то уже перешел на Drupal console , а я по-старинке использую Drush и Drush-алиасы , которые очень полезны при работе с несколькими окружениями.

Описание drush-алиасов, достойно отдельной темы, но если коротко, то основная функция алиасов - проксирование команд.
Проще говоря, если у Вас есть сайт "рога-копыта.рф" (например, алиас: rk) с четырьмя окружениями local, dev, test и prod, то вы можете создать алиасы, чтобы очистка кэша на всех окружениях не была болью, а выполнялась в четыре команды:

drush @rk.local cc all
drush @rk.dev cc all
drush @rk.test cc all
drush @rk.prod cc all

Об агрегации

Агрегация или объединение алиасов позволяет проксировать комманды сразу на несколько окружений. Предыдущий пример можно объединить в дополнительный алиас all и выполнять команды, используя его.

drush @rk.all cc all -y

Флаг -y, говорит о том, что Вы заранее отвечаете "Да" на все будущие вопросы в течении выполнения команды.

Будьте внимательны! Рекомендую использовать алиас агрегации только при запуске безопасных команд.

Так будет получен следующий вывод:

$ drush @rk.all cc all -y
You are about to execute 'cc all' non-interactively (--yes forced) on all of the following targets:
  @rk.local
  @rk.dev
  @rk.test
  @rk.prod
Continue?  (y/n): y
rk.local >> 'all' cache was cleared in rk.local                                            [success]
rk.dev   >> 'all' cache was cleared in rk.dev                                              [success]
rk.test  >> 'all' cache was cleared in rk.test                                             [success]
rk.prod  >> 'all' cache was cleared in rk.prod                                             [success]

Здóрово правда?

Пример файла агрегации:

<?php
// Алиасы для окружений.
// ...

// Агрегация алиасов.
$aliases['all'] = array(
  'site-list' => array('@rk.local', '@rk.dev', '@rk.test', '@rk.prod')
);

Все это кладём в папку ~/.drush (или C:\Users\<имя пользователя>\.drush для Windows) с именем rk.aliases.drushrc.php и можно пользоваться.

Бонус

Второй вариант использования агрегационных алиасов - проксирование команд на разные сайты одного окружения.

Предположим, у вас есть некоторое количество сайтов на поддержке с local, dev, test и prod окружениями. Конечно, их необходимо периодически обновлять. Так, если у Вас будет 4 сайта, то всего придётся выполнить обновление 16 раз. Не очень приятная процедура, даже с использование drush.

Здесь, затея с объединением алиасов по сайтам имеет мало смысла, т.к. обновлять local, dev, test и тем более prod окружения опасно. В данном случае, необходимо выполнить объединение алиасов сайтов по окружениям. Например, так:

@my-sites.local
@my-sites.dev
@my-sites.test
@my-sites.prod

Тогда обновление выглядит много проще:

drush @my-sites.local upc -y # обновляем код
# Проверяем, что код обновился корректно
drush @my-sites.local updb -y # накатываем обновления на базу
# Проверяем, что базы обновлены корректно
drush @my-sites.local cron -y # запускаем крон

Другие посты