https://github.com/notamedia/console-jedi
Основные преимущества
Модуль разработан для того, чтобы полноценно подключить Битрикс к системе Continuous Integration. Он позволяет делать типовые операции по управлению площадкой не выходя из консоли и/или с помощью автоматизированных систем.
С помощью этого модуля также можно расширять возможности Ваших модулей, делая им консольные команды. Установка решения через composer упростит работу с зависимостью.
Решение используется в нескольких проектах Notamedia, а также используется как основа для других решений компании.
Этот модуль являтся результатом более чем двухлетнего исследования и опыта по интеграции Битрикса и консоли.
Допустим, Вы хотите автоматически очищать кэш Битрикса после выкатки проекта вашим CI (так делать, конечно, нельзя, но мы рассмотрим этот заведомо ложный пример для иллюстрации).
"notamedia/console-jedi"
и укажите версию. Старайтесь не использовать неявное указание версии через "*"
, если Вы занимаетесь коммерческой разработкой. Следуйте принципам семантического версионирования или фиксируйте версию явно../vendor/bin/jedi init
и ответьте ему в интерактивном режиме на вопросы. Это разовая операция, с помощью которой генерируется файл jedi
, используемый для запуска консольных команд../vendor/bin/jedi bitrix/cache:clear
Для исследования других консольных команд запустите jedi
, он сам расскажет все подробности.
Примечание: консольные команды следует выполнять от того же Linux-пользователя, от имени которого работает Ваш веб-сервер. Никогда не запускайте консольные команды от имени пользователя root! В противном случае могут быть созданы файлы, с которыми веб-сервер не сможет работать.
Допустим, Вы хотите добавить свои команды. Например, Вам нужна команда, которая будет синхронизировать данные Вашего сайта со сторонней системой.
Запускать подобные синхронизации через веб-интерфейс - решение очевидное, но опасное: “тяжёлые” процессы могут “отваливаться” по таймауту, их нельзя будет прервать (и при плохо настроенном веб-сервере они будут “подвешивать” работу всего сайта), случайный пользователь или злоумышленник может воспользоваться вашей “специальной ссылкой для синхронизации” и запустить процесс без вашего ведома.
Консольные команды решают эти, и некоторые другие проблемы на корню.
Итак, мы будем создавать модуль mycompany.synchWithCrm
, который должен содержать консольные команды.
Создайте “болванку” модуля
Её можно создать, руководствуясь документацией 1С-Битрикс, или готовым решением-заготовкой, одним из многих, выложенных на гитхабе.
Предположим, что модуль будет находится в папке
/local/modules/mycompany.synchwithcrm/
В модуле создайте файл cli.php
: /local/modules/mycompany.synchwithcrm/cli.php
В этом файле Вы пропишете список команд, например
<?php
return [
'commands' => [
new \Mycompany\Synchwithcrm\Console\DoSynchCommand(),
]
];
где каждая каждая такая команда - это объект класса, расширяющего класс Notamedia\ConsoleJedi\Command\BitrixCommand
. Пример такой команды Вы можете посмотреть в console-jedi/src/Command/Agents/OnCronCommand.php
.
Создайте класс \Mycompany\Synchwithcrm\Console\DoSynchCommand
, упомянутый на прошлом шаге
Кроме правильного наследования, Вам нужно будет прописать у него два метода: configure()
и execute(InputInterface $input, OutputInterface $output)
.
Сейчас в методе execute(..)
пропишите просто echo "Hello world";
, чтобы убедиться, что система работает.
Запустите jedi
и в списке команд Вы увидите свою созданную команду
Теперь в известном Вам методе можно прописать “тяжёлую” логику по синхронизации данных, не разбивая её на итерации.
Прописав запуск этой операции на cron или запуская её по какому-то необходимому событию, мы получаем желаемый результат.