Skip to content

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

Кто‑то уже перешёл на Drupal Console, а кто‑то до сих пор использует Drush и Drush‑алиасы. Алиасы сильно упрощают работу с несколькими окружениями.

Типичный кейс: есть сайт рога-копыта.рф с алиасом @rk и окружения local, dev, test, prod. Очищать кэш приходится так:

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

С агрегацией можно запускать одну команду.

Агрегационный алиас

Определим алиас all, который объединяет несколько окружений:

php
<?php
// ...обычные алиасы окружений выше...

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

Файл кладём, например, в ~/.drush/rk.aliases.drushrc.php (или C:\Users\<user>\.drush\... под Windows).

Теперь можно делать так:

bash
drush @rk.all cc all -y

Пример вывода:

text
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]

Флаг -y заранее отвечает «да» на все вопросы.

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

Бонус: алиасы по окружениям

Если есть много сайтов на поддержке, но те же самые окружения (local/dev/test/prod), можно агрегировать сайты по окружениям:

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

Тогда обновление всех сайтов на local будет выглядеть, например, так:

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