Codeship.io: бесплатный CI сервер для приватного репозитория Github/Bitbucket
Сразу заинтригую: в результате мы получим связку бесплатного приватного git репозитория на Bitbucket и бесплатный* Continious Integration сервер (SAAS), который будет собирать проект и прогонять все тесты после каждого пуша.* — бесплатная подписка дает возможность тестировать 5 приватных репозиториев и максимум 100 билдов в месяц.Мне этого для личного проекта достаточно.
Приведу пример для PHP, проект на Symfony2, но данный сервис поддерживает ещё и Ruby, Node.js, Python.
Установить Symfony2 и зависимости через composer Запустить PHPUnit тесты Запустить Behat тесты После регистрации создаем новый проект, синхронизируем с Bitbucket и в настройках проекта будем писать команды, необходимые для сборки.Есть предустановленные шаблоны, после выбора PHP наш набор команд становится таким:
# Set php version through phpenv. 5.3, 5.4 and 5.5 available phpenv local 5.5 # Install extensions through Pecl # pecl install memcache # Install dependencies through Composer composer install --prefer-source --no-interaction Мне еще понадобился GeoIP extension, после недолгого обсуждения с техподдержкой всё отлично установилось, теперь список команд стал выглядеть так:
Setup Commands # Set php version through phpenv. 5.3, 5.4 and 5.5 available phpenv local 5.5
# Install extensions through Pecl pecl install -f geoip wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz cp ./GeoLiteCity.dat ./GeoIPCity.dat # меняем путь, так как стандартный недоступен в целях безопасности echo «geoip.custom_directory=/home/rof/clone» >> /home/rof/.phpenv/versions/5.5/etc/php.ini
# Install dependencies through Composer composer install --prefer-source --no-interaction Техподдержка, стоит отметить, очень хорошая. Помогли со всеми проблемами и ответили на все вопросы.
База данных Для Behat тестов необходимо развернуть БД, импортировать тестовые данные через Fixtures, и запустить непосредственно сами тесты.Codeship.io поддерживает MySQL, MongoDB, PostgreSQL, SQLite (приятно удивило наличие Elasticsearch из коробки). В нашем случае работаем с MySQL, автоматиески уже созданы 2 базы данных — development и test.Пароль и пользователь хранятся в переменных окружения MYSQL_PASSWORD, MYSQL_USER соответственно.
В Symfony2 переменные окружения можно использовать в качестве параметров в файлах конфигурации, но используя некоторые правила, а именно должен быть префикс SYMFONY__ у каждой переменной.
Изменим config_test.yml так, чтобы использовать переменные окружения в качестве пользователя, пароля, и имени базы данных:
// app/config/config_test.yml … doctrine: dbal: dbname:»%test.database.name%» driver: pdo_mysql user:»%test.database.user%» password:»%test.database.password%» … И определим эти самые переменные в «Setup Commands» в настройках нашего проекта:
export SYMFONY__TEST__DATABASE__USER=$MYSQL_USER export SYMFONY__TEST__DATABASE__PASSWORD=$MYSQL_PASSWORD export SYMFONY__TEST__DATABASE__NAME=test Вот и всё, конфигурация MySQL на этом закончена. Теперь создадим схему и запустим fixtures для импорта тестовых данных:
php app/console doctrine: schema: update --force --env=test php app/console doctrine: fixtures: load --no-interaction --env=test Ну и запускаем встроенный веб-сервер, пример запуска взят из документации и добавлен только параметр для изменения document root’a (в Symfony2 это папка web):
nohup bash -c «php -S 127.0.0.1:8000 -t web/ 2>&1 &» && sleep 1; cat nohup.out Тесты Теперь можно запускать все наши тесты. Для этого есть специальный блок «Modify your Test Commands», вписываем туда команды:
phpunit -c app ./bin/behat »@AppApiBundle/api.feature» --profile=api --no-paths ./bin/behat »@AppCoreBundle/core.feature» --profile=core --no-paths При запуске тестов у меня возникла проблема из-за xDebug: «Fatal error: Maximum function nesting level of »100» reached«Увеличим данный параметр, изменив php.ini в «Setup Commands»:
echo «xdebug.max_nesting_level=200» >> /home/rof/.phpenv/versions/5.5/etc/php.ini В случае, если ваш билд выполнился с ошибкой, автоматически приходит email уведомление, которое выглядит так:
Также приходит уведомление после того, как билд восстановлен.Помимо этого, есть интеграция с множеством сервисов: (картинка с сайта codeship.io)
Данный сервис имеет еще кучу фишек, например можно сразу деплоить успешный билд.
Что понравилось в codeship.io:
Возможность тестировать бесплатно приватный репозиторий. Киллер фича Отличная техподдержка Подробная документация Поддержка ElasticSearch и легкая настройка в билдах. Что не понравилось:
Дизайн. Тот, который в аккаунте после логина. На мой взгляд он ужасен. Ограничение в 100 билдов в месяц, хотя для бесплатной подписки спасибо и за это. Если вы знаете ещё какие-нибудь SaaS сервисы, где можно бесплатно тестировать приватные репозитории, пожалуйста, поделитесь в комментариях.