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 минут.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое