Magento-модули и Travis CI

от автора

Краткая заметка с примерами конфигов, как использовать Travis CI при разработке модулей для Magento обеих версий.

Общая информация

Код примеров приложений:

Описание приложения для Magento 2. Приложение для Magento 1 весьма похоже по структуре и способу развертывания.

Каждый из рассматриваемых модулей является головным модулем Magento-приложения (содержит инструкции по развертыванию конечного web-приложения и подключения к нему других модулей). Развертывание может происходить в одном из трех вариантов:

  • live: для конечного применения (production mode);
  • work: для разработки (development mode);
  • travis: для тестирования в среде Travis CI;

В каждом из вариантов сначала при помощи PHP Composer’а происходит развертывание в отдельный каталог самой Magento, а затем в развернутое приложение монтируются файлы модулей (копируются при live-развертывании, линкуются через символические ссылки в остальных случаях). После этого запускаются Magento-инсталлятор, который создает при необходимости начальную БД, и SQL-скрипт, изменяющий в начальной базе данных default’овые значения в зависимости от типа развертывания (включение перехода по символическим ссылкам, логирования и т.п.).

Чтобы не плодить сущностей, для разработки (work) и CI-тестирования (travis) используется один набор скриптов для развертывания:

  • work/composer.json: дескриптор (М1 / М2) composer-проекта;
  • work/cfg/bin/deploy/post_install.sh: шаблон (М1 / М2) shell-скрипта для запуска Magento-инсталлятора и SQL-скрипта;
  • work/cfg/bin/deploy/post_install.sql: шаблон (М1) SQL-скрипта с изменениями для девелоперской версии окружения;

Само приложение развертывается в подкаталоге ./work/htdocs/. При развертывании в шаблонах post_install.sh и post_install.sql переменные (placeholders — пути, параметры доступа к БД, URL’ы и т.п.) замещаются их действующими значениями из конфигурационного файла ./work/templates.json и результирующие скрипты помещаются в каталог ./work/bin/deploy/.

Тестирование всех модулей, входящих в приложение, описывается в дескрипторах PHPUnit:

  • work/test/functional/phpunit.dist.xml: дескриптор (М1 / М2) для запуска функциональных тестов (с подключением к БД);
  • work/test/unit/phpunit.dist.xml: дескриптор (М1 / М2) для запуска unit-тестов (без подключения к БД);

CI для Magento 1

Дескриптор для Travis’а:

sudo: false # use container-based environment on Travis language: php php:   - 5.6   - hhvm   - '7'  before_install:   - cd work # go to root folder for development environment   - pwd # control current path ('LOCAL_ROOT' in templates.json)   - cp templates.json.travis templates.json # create configuration for Travis from template   - composer self-update  # update composer to prevent error Class 'Composer\Installer\PackageEvents' not found in #   .../work/vendor/aydin-hassan/magento-core-composer-installer/src/CoreManager.php on line 109   - composer install  # install project using PHP Composer   - cat ./bin/deploy/post_install.sh  # control parameters in the installation script   - cat ./bin/deploy/post_install.sql # control parameters in the SQL script   - sh ./bin/deploy/post_install.sh # create initial DB, run SQL script, setup permissions, ...  script:   - phpunit --configuration ./test/unit/phpunit.dist.xml  # run project's unit tests   - phpunit --configuration ./test/functional/phpunit.dist.xml # run project's functional tests 

При развертывании и тестировании каких-либо особых неожиданностей не возникает, весь процесс занимает порядка 3-4 минут.

CI для Magento 2

Дескриптор для Travis’а:

sudo: required # use Travis standard env (http://docs.travis-ci.com/user/ci-environment/) language: php php:   - 5.6 #  - hhvm # there is an error on DB installation: "Command option 'language': Invalid value. To see possible values, # ... run command 'bin/magento info:language:list'."  before_install: # Setup MySQL 5.6 on Ubuntu 12.04 (thanks to drogus - https://gist.github.com/drogus/6718448):   - mysql --version # control version before upgrade   - sudo apt-get remove mysql-common mysql-server-5.5 mysql-server-core-5.5 mysql-client-5.5 mysql-client-core-5.5   - sudo apt-get autoremove   - sudo apt-get install libaio1   - wget -O mysql-5.6.14.deb http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.14-debian6.0-x86_64.deb/from/http://cdn.mysql.com/   - sudo dpkg -i mysql-5.6.14.deb   - sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysql.server   - sudo ln -s /opt/mysql/server-5.6/bin/* /usr/bin/ # some config values were changed since 5.5   - sudo sed -i'' 's/table_cache/table_open_cache/' /etc/mysql/my.cnf   - sudo sed -i'' 's/log_slow_queries/slow_query_log/' /etc/mysql/my.cnf   - "sudo sed -i'' 's/basedir[^=]\\+=.*$/basedir = \\/opt\\/mysql\\/server-5.6/' /etc/mysql/my.cnf" # there is an error # ... w/o double quotes: The command "sudo sed -i'' 's/basedir[^=]\+=.*$/basedir = \/opt\/mysql\/server-5.6/' /etc/mysql/my.cnf" failed and exited with 1 during .   - sudo /etc/init.d/mysql.server start   - mysql --version # control version after upgrade # Deploy Magento 2 application # Go to working folder, copy templates.json for travis and start composer install process   - cd work #  go to root folder for development environment   - pwd # control current path ('LOCAL_ROOT' in templates.json)   - cp templates.json.travis templates.json # create configuration for Travis from template #  - composer self-update # update composer to prevent error Class 'Composer\Installer\PackageEvents' not found in #   .../work/vendor/aydin-hassan/magento-core-composer-installer/src/CoreManager.php on line 109   - composer install # Run post installation script (deploy Magento2 itself)   - cat ./bin/deploy/post_install.sh # control parameters in the installation script   - sh ./bin/deploy/post_install.sh # create initial DB, setup permissions, ...  script:   - phpunit --configuration ./test/unit/phpunit.dist.xml # run project's unit tests   - phpunit --configuration ./test/functional/phpunit.dist.xml # run project's functional tests #  - phpunit --configuration ./htdocs/dev/tests/unit/phpunit.xml.dist # run Magento 2 unit tests 

С Magento 2 все несколько интереснее. Для начала нужно решить проблему с версией MySQL. В стандартном окружении Travis’а (Ubuntu 12.04) используется сервер MySQL 5.5, а Magento 2 требует для себя версию 5.6. Помог способ от коллеги drogus’а.

Затем выяснилось, что кроме версии PHP 5.6 развертывание нигде не проходит. На PHP 7 ругается Magento 2, а на HHVM не запускается инсталлятор. Ошибка при запуске инсталляции Magento 2, несмотря на то, что параметр language разрешенный («en_US»):

Command option 'language': Invalid value. To see possible values, run command 'bin/magento info:language:list 

Для наших нужд хватает и одной только PHP 5.6, поэтому с HHVM даже не стал бороться.

Можно также запустить тесты самой Magento 2, но на Travis’е они сваливаются на 4071-м (из 15062) по причине нехватки памяти:

.PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 122133 bytes) in /home/travis/build/flancer32/sample_mage2_module/work/vendor/phpunit/phpunit/src/Util/GlobalState.php on line 110 

Весь процесс развертывания и тестирования занимает порядка 8-10 минут.

ссылка на оригинал статьи http://habrahabr.ru/post/247349/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *