- PVSM.RU - https://www.pvsm.ru -

Пример модуля для Magento 2 другимъ манеромъ

Осенью прошлого года, когда вышла Magento 2.0, я написал статью "Пример модуля для Magento 2 [1]", в которой обрисовал один из возможных вариантов формирования окружения для разработки модуля под вторую версию Magento. Совсем недавно вышли обновления (v 2.0.1 и v 2.0.2), судя по которым разработчики Magento уходят от схемы развертывания с использованием Magento Composer Installer [2] (при помощи которого разворачивается Magento 1 и разворачивалась в моем предыдущем примере Magento 2.0.0), По крайней мере, простое изменение версии Magento c 2.0.0 на 2.0.1 приводило к тому, что то, что разворачивалось, работать как Magento-приложение совершенно не хотело.

Под катом — новый пример развертывания окружения, адаптированный под изменившиеся условия.

Задачи окружения

Пример [3] содержит скрипты, предоставляющие возможность:

  1. Разворачивать среду локально для разработки Magento2-модуля;
  2. Разворачивать среду на сервисе Travis CI для тестирования Magento2-модуля;

Краткое содержимое

Описание основных каталогов и файлов flancer32/sample_mage2_module:

  • /deploy/: файлы, использующиеся при развертывании;
    • /composer_opts.json: опции для добавления в оригинальный composer.json Magento2 CE;
    • /composer_unset.json: список ключей оригинального composer.json для удаления;
    • /merge_json.php: утилита по слиянию основного JSON-файла Magento2 CE и дополнительных опций;
  • /dev/fw/FuncTestApp.php: имплементация Magento2-приложения для запуска функциональных тестов;
  • /src/: исходники самого Magento-модуля;
  • /test/: тесты Magento-модуля;
    • /functional/: функциональные тесты модуля (с подключением к БД);
    • /unit/: unit-тесты модуля (все окружение mock'ируется');
  • /work/: каталог развертывания среды для разработки и тестирования Magento-модуля;
  • /.travis.yml: сценарий тестирования для Travis CI;
  • /composer.json: composer.json для разрабатываемого модуля;
  • /deploy.sh: сценарий развертывания;
  • /deploy_cfg.sh.init: шаблон для задания конфигурационных параметров локальной развертки;
  • /deploy_cfg.sh.travis: конфигурационные параметры для развертывания на Travis CI;

Общий алгоритм развертывания

  • При помощи composer'а создаем Magento2 CE проект;
  • Дополняем composer.json CE проекта нужными нам инструкциями;
  • При помощи composer'а обновляем проект;
  • Запускаем инсталлятор самой Magento для инициализации базы данных;
  • Выставляем права на каталоги и файлы;

Конфигурация

При развертывании конфигурация считывается из файла ./deploy_cfg.sh (не находится под контролем версий по понятным причинам). Шаблон для создания конфигурационного локального файла содержит параметры двух типов:

  • настройки [4] magento-инсталлятора, запускающегося из командной строки в deploy.sh;
  • права на файловую систему Magento-приложения (владелец и группа);

Дополнительные опции composer.json

В дополнительных опциях к оригинальному Magento2 CE приложению добавляются:

  • непосредственно сам разрабатываемый модуль;
  • инструкция autoload-dev для использования имплементации Magento2-приложения для запуска функциональных тестов;
  • понижение минимальной стабильности composer-пакетов с alpha до dev;

Слияние JSON-конфигураций

В данном примере считывание JSON-конфигурации и дальнейшая обработка ведется через универсальный контейнер данных (DataObject [5]), что, по большому счету, излишне (см. ./deploy/merge_json.php). Тем не менее, я использовал этот компонент, чтобы проверить возможность подключения при развертывании дополнительных зависимостей, используемых исключительно при развертывании. Вообщем, это можно выкинуть, если мешает. Помимо правок в merge_json.php также нужно выкинуть из ./deploy.sh строки

echo "nAdd initial dependencies to M2 CE project..."
composer require flancer32/php_data_object:dev-master

Перед слиянием удаляется элемент minimum-stability в оригинальном composer.json Magento2 CE (см. файл deploy/composer_unset.json), т.к. в противном случае он будет содержать массив [ 'alpha', 'dev' ] вместо единичного значения 'dev'.

Инициализация приложения

Magento2-инсталлятор просто запускается из deploy.sh:

php $M2_ROOT/bin/magento setup:install ...

Доступные для инициализации параметры [4].

Тестирование модуля

$ cd work/vendor
$ php ./bin/phpunit -c flancer32/sample_mage2_module/test/unit/phpunit.dist.xml
$ php ./bin/phpunit -c flancer32/sample_mage2_module/test/functional/phpunit.dist.xml

Лог [6] Travis'а.

Дополнения

Version Control

Разработка модуля происходит не в каталоге ./src, а в каталоге ./work/vendor/flancer32/sample_mage2_module/src. Для того, чтобы IDE распознавало все модули, находящиеся в разработке, нужно их перечислить в соответствующих настройках (для PhpStorm это File / Settings / Version Control).

Secret key for Magento Connect

Для создания composer-проекта

$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition $M2_ROOT

нужно создать пару "ключей" на сайте Magento Connect [7]. В случае развертывания вручную из командной строки composer сохраняет эти параметры в локальных настройках, в случае развертывания на Travis CI нужно задавать эти параметры в переменных окружения [8] $M2_KEY_PUB & $M2_KEY_PRIV или прямо указать в .travis.yml:

  - composer config -g http-basic.repo.magento.com PUBLIC PRIVATE

Error: Maximum function nesting level of '100' reached

При возникновении данной ошибки нужно добавить в php.ini:

xdebug.max_nesting_level=200

Phing

Phing [9] ничего не предлагает для сборки Magento-проектов (да он и не должен, в общем-то). Поэтому вот так — shell & composer.

"Другимъ манеромъ"

Словосочетание взято из какой-то весьма старой поваренной книги, которая когда-то мне попалась на глаза.

Отскок от ответственности

Данный материал является просто примером и не может служить основой для развертывания реальных приложений без его осмысления.

Автор: flancer

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/deployment/112542

Ссылки в тексте:

[1] Пример модуля для Magento 2: https://habrahabr.ru/post/268245/

[2] Magento Composer Installer: https://github.com/magento/magento-composer-installer

[3] Пример: https://github.com/flancer32/sample_mage2_module

[4] настройки: http://devdocs.magento.com/guides/v2.0/install-gde/install/cli/install-cli-install.html#instgde-install-cli-magento

[5] DataObject: https://habrahabr.ru/post/273261/

[6] Лог: https://travis-ci.org/flancer32/sample_mage2_module/

[7] Magento Connect: https://www.magentocommerce.com/magento-connect/customerdata/secureKeys/list/

[8] переменных окружения: https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings

[9] Phing: https://www.phing.info/

[10] Источник: https://habrahabr.ru/post/277183/