06 Апр 2016
Рано или поздно практически на любом сайте встаёт необходимость выполнения скриптов в консоли, будь то воркеры, выполняющие в фоне ресурсоёмкие операции, или инструментарий по обслуживанию сайта. Кроме того, внедрение непрерывной интеграции так же требует автоматизации настройки и обновления приложения.
Приступая к созданию очередного консольного скрипта конечно же хочется свести к минимуму написание кода и уделить больше внимания основной логике. Для этого существуют различные библиотеки и во многих популярных фреймворках они идут в комплекте. Но иногда, волей судеб, приходится работать над сайтами, лишёнными таких удобных инструментов. Так случилось и со мной на нескольких битрикс-проектах, что побудило меня к созданию Console Jedi — консольного приложения для «Битрикса».
Я не люблю велосипедостроение и считаю его дорогим и нерациональным, поэтому «Джедай» работает на основе компонента Symfony Console.
Console Jedi, фактически, является прослойкой между пользователем и Symfony Console, которая позволяет управлять «Битриксом». «Джедай» пытается запустить «Битрикс» и, если это удалось, выводит консольные команды, которые не могут работать без него.
Под фразой «запустить „Битрикс“» я имею в виду полную инициализацию системы, т. к. без подключения к БД «Битрикс» полноценно работать не может.
В случае, если «Битрикс» по каким-то причинам не поднялся, Console Jedi всё равно запустится, но будут доступны только те команды, которые не требуют наличия «Битрикса». Это удобно, например, для разворачивания проекта с чистого листа.
Console Jedi устанавливается через Composer. Сразу же после этого в vendor/bin появится скрипт для запуска консольного приложения:
composer require notamedia/console-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, за исключением класса-родителя, от которого нужно наследовать команду:
Во время запуска Console Jedi автоматически подтянет команды всех модулей. Кроме того, вы можете зарегистрировать дополнительные команды через настройки в .jedi.php:
<?php
С помощью 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 имеет особый алгоритм выполнения, заслуживающий отдельного объяснения:
***
На этом я завершаю вводную статью, но обращаю внимание читателя, что возможности «Джедая» намного шире :-) В следующих заметках вы узнаете, как создавать простые воркеры на базе битриксовой технологии «Агенты», разрабатывать автотесты и писать миграции БД.