Console Jedi: первое знакомство





Рано или поздно практически на любом сайте встаёт необходимость выполнения скриптов в консоли, будь то воркеры, выполняющие в фоне ресурсоёмкие операции, или инструментарий по обслуживанию сайта. Кроме того, внедрение непрерывной интеграции так же требует автоматизации настройки и обновления приложения.

Приступая к созданию очередного консольного скрипта конечно же хочется свести к минимуму написание кода и уделить больше внимания основной логике. Для этого существуют различные библиотеки и во многих популярных фреймворках они идут в комплекте. Но иногда, волей судеб, приходится работать над сайтами, лишёнными таких удобных инструментов. Так случилось и со мной на нескольких битрикс-проектах, что побудило меня к созданию Console Jedi — консольного приложения для «Битрикса».

Я не люблю велосипедостроение и считаю его дорогим и нерациональным, поэтому «Джедай» работает на основе компонента Symfony Console.

Console Jedi, фактически, является прослойкой между пользователем и Symfony Console, которая позволяет управлять «Битриксом». «Джедай» пытается запустить «Битрикс» и, если это удалось, выводит консольные команды, которые не могут работать без него.

Под фразой «запустить „Битрикс“» я имею в виду полную инициализацию системы, т. к. без подключения к БД «Битрикс» полноценно работать не может.

В случае, если «Битрикс» по каким-то причинам не поднялся, Console Jedi всё равно запустится, но будут доступны только те команды, которые не требуют наличия «Битрикса». Это удобно, например, для разворачивания проекта с чистого листа.

Установка

Console Jedi устанавливается через Composer. Сразу же после этого в vendor/bin появится скрипт для запуска консольного приложения:

composer require notamedia/console-jedi
./vendor/bin/jedi

Но сейчас «Джедай» имеет ограниченные возможности, необходимо провести его настройку. Команда init задаст вам несколько вопросов и выполнит все необходимые операции:

./vendor/bin/jedi init

В итоге, появится каталог environments с настройками окружений (dev, prod) и конфигурационный файл .jedi.php в корне проекта.


Команды

В состав Console Jedi входят команды:

env:init Настройка окружения приложения. Копирование файлов, конфигурация «Битрикса».
cache:clear Полный или точечный сброс кеша.
agent:execute Запуск агентов («битриксовых» воркеров).
agent:on-cron    Перевод выполнения агентов на cron.
module:load Загрузка и установка модуля из Маркетплейса.
module:register Установка модуля.
module:remove Полное удаление модуля
module:unregister  Отключение модуля.
module:update Установка обновлений модуля из Маркетплейса.

Создать свою команду проще простого. Процесс аналогичен тому, что описано в документации Symfony, за исключением класса-родителя, от которого нужно наследовать команду:

  • \Notamedia\ConsoleJedi\Application\Command\Command — для простых команд,
  • \Notamedia\ConsoleJedi\Application\Command\BitrixCommand — для команд, которые не могут работать без «Битрикса».

Дабы соблюдать модульность проекта, свои консольные команды нужно размещать в модулях «Битрикса». Для этого в файле vendor.module/cli.php должны быть описаны консольные команды модуля:
<?php

return [
    'commands' => [
         new \Vendor\Module\Console\Command\FirstCommand(),
    ]
];

Во время запуска Console Jedi автоматически подтянет команды всех модулей. Кроме того, вы можете зарегистрировать дополнительные команды через настройки в .jedi.php:

<?php

return [
    'commands' => [
        new MyCommand()
    ]
];

Непрерывная интеграция

С помощью Console Jedi сочетание слов «Битрикс» и CI становится реальностью: от ныне проект можно развернуть и настроить одной консольной командой, как в песочнице у разработчика, так и на боевой площадке.

Например, после выкачивания свежего кода на боевой площадке будет достаточно выполнить несколько команд:

composer install --no-dev --prefer-dist
./vendor/bin/jedi env:init prod --no-interaction
./vendor/bin/jedi phinx:migrate --no-interaction

(Последняя — для выполнения миграций БД — не поставляется вместе с «Джедаем», эту библиотеку нужно устанавливать отдельно.)

Команда env:init имеет особый алгоритм выполнения, заслуживающий отдельного объяснения:




***

На этом я завершаю вводную статью, но обращаю внимание читателя, что возможности «Джедая» намного шире :-) В следующих заметках вы узнаете, как создавать простые воркеры на базе битриксовой технологии «Агенты», разрабатывать автотесты и писать миграции БД.

Комментарии

comments powered by HyperComments