Travis начало

travisэто сервис для автоматического тестирования кода, он интегрирован с GitHub поддерживает множество языков и библиотек, в данном случае нас интересует PHP и тесты на PHPUnit. Это очень удобно когда вы разрабатываете открытую библиотеку, остальным нет необходимости запускать тесты локально, все будет доступно на travis.

Мы рассмотрим, как добавить приложение на travis-ci.org на примере 4devs/blog.

Самое главное что у вас должен быть код покрытый тестами и они должны все быть работоспособны. Надо зарегистрироваться на travis-ci.org, сделать это можно только с помощью GitHub. Travis с ним очень плотно интегрирован и использовать его с другими подобными сервисами не получится.

создаем файл .travis.yml в корне проекта с таким содержимым, также есть и другие примеры.

language: php

php:
  - 5.4
  - 5.5

matrix:
  allow_failures:
    - php: 5.5

env:
  global:
  matrix:
    - REQUIRE=no-dev
    - REQUIRE=dev

before_script:
  - mkdir app/cache
  - chmod 777 app/cache
  - cp app/config/parameters.yml.desc app/config/parameters.yml
  - echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
  - composer self-update
  - composer --${REQUIRE} --prefer-source install
  - app/console doctrine:mongodb:fixtures:load

services: mongodb

script: phpunit -c app/

директива language говорит от том какой язык используем в нашем случае это php.

php это поддерживаемые версии в нашем случае мы может только от 5.4 и выше, тесты будут выполнены под всеми указанными версиями отдельно. возможен такой вариант

php:
  - 5.3
  - 5.4
  - 5.5

но в нашем случае тесты на версии 5.3 точно не прошли, так как есть не совместимые изменения.

matrix - дает возможность выполнять тесты под разными конфигурациями а директива allow_failures в данном случае означает что тесты с версией php5.5 могут не пройти, от них не зависит статус всех тестов

env наше рабочее окружение, я использовал тут matrix, чтобы тесты выполнялись при разных установках composer, глобальных переменных у меня нет, можно через пробел писать несколько переменных к примеру - REQUIRE=no-dev USE_NETWORK=true подробнее можно узнать на travis. global имеет такой же формат как и matrix, только использоваться будут во всех build.

before_script - все действия построчно что нам необходимо делать перед тестами, здесь будет и установка всего приложения и очистка кеша если такое необходимо, переменные указанные нами ранее можно использовать, у нас есть - echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini установка дополнительной библиотеки php, так как не все они включены по умолчанию, список расширений которые включены можно узнать здесь

script: phpunit -c app/ это соответственно запуск самих тестов у travis, соответственно PHPUnit там установлен, запуск считается от корня проекта. У меня PHPUnit установлен на рабочей машине глобально, поэтому я также запускаю их у себя из корня проекта.

Выводы.

В данном примере будет сделано всего 4 сборки(php 5.4 и dev, php 5.4 и prod, php 5.5 и dev, php 5.5 и prod) и все они протестированы, но тесты версии php 5.5 то есть сборка дев версии и прод не будут влиять на общий результат.

Данный сервис полезен прежде всего тем кто будет использовать ваши библиотеки. Вы не всегда можете протестить под разным окружением, и можно к примеру подготовиться для будущего перехода на скажем php 5.5.

Пример вполне рабочий, можно результат посмотреть . Это краткое введение, для более детального изучения всех его возможностей воспользуйтесь документацией.

Читайте также:

Docker установка и настройка

При разработке используется множество технологий. К примеру данный блог использует php(Symfony 2), mongodb, elastic, nginx это основные но также используется nodejs к примеру для минификации css, js. При разработке приходится настраивать все технологии как показано в статье. Но что делать если проектов несколько или они используют разные технологии, например другой проект использует MySQL, или еще могут использовать разные версии php или других библиотек. Для разработки и поддержки проектов на разных технологиях можно использовать Виртуальную машину и поставить на нее к примеру centos, но это не совсем удобно, надо все равно настраивать подобное окружение как на сервере и на других машинах разработчиков. Мы будет использовать контейнеры, такие как Docker. Настроем блог разработчиков чтобы использовать Docker для разработки.

Как использовать произвольное хранилище пользователей в FOSUserBundle

Практически все используют FOSUserBundle в своих Symfony проектах т.к. он ускоряет разработку и обладает хорошим набором функциональности для управления пользователями. Бандл предоставляет несколько готовых реализаций хранилищ данных: Propel и несколько для Doctrine (ORM и ODM). Это здорово, но иногда возникает необходимость работы с другими хранилищами данных. FOSUserBundle достаточно гибок и позволяет реализовать, и использовать произвольное хранилище. Для того, чтобы использовать все возможности FOSUserBundle Вам достаточно будет написать свой менеджер пользователей под конкретного провайдера.

Интеграция Paysera в Symfony

Сегодня сложно представить себе серьезный проект, где не понадобилась бы интеграция с платежными системами. Не смотря на то что существует множество популярных систем и аггрегаторов, таких как PayPal, RBKMoney, Paymentwall, Robokassa и т.д., я хочу рассказать о Paysera. Это еще одна, довольно новая платежная система. Они позиционируют себя как выгодных с точки зрения комиссий за их услуги. Paysera позволяет вашим пользователям расплачиваться карточками, SMS и т.д. Интеграция довольно простая, однако имеет некоторые неочевидные моменты, которые я и хочу осветить.

Создание сайта “Обратный отсчет” на Symfony2

Мы иногда видим сайты с обратным отсчетом, проект стартует через … Его сделать достаточно просто, и не займет много времени. Мы воспользуемся проектом fdevs/coming-soon, который основан на Symfony2. Также будем сохранять введеный пользователями адреса электронной почтой в базу данных MongoDB. У нас есть настроенное рабочее окружение Osx, о настройке можно прочитать в статье Yosemite настройка рабочего окружения. Но главное версия php не меньше 5.4. В проекте можно также использовать реляционную базу данных типа MySQL. По умолчанию в проекте вообще не используется база данных, а введеный email отправляется на почту.

Yosemite настройка рабочего окружения.

После обновления OSx Yosemite, необходимо настроить рабочую систему. Мы установим и настроим пакеты php-fpm, nginx, mongo, nodejs. Для начала установим Xcode из App Store обновим консольные команды $ xcode-select --install и уберем apache из автозагрузки $ sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist . Так как у Apple не появилось своего менеджера пакетов будем использовать проверенный brew.