Совсем недавно вышла из бета-версии новая система непрерывной интеграции для PHP-проектов с открытым исходным кодом — PHPCI (текущая версия — 1.1.0), она вскользь упоминалась в дайджесте PHP №21.
Я уже какое-то время эксперементирую с этой системой, поэтому хочу представить вам небольшой ее обзор, тем более что на Хабре нет ни одной статьи о ней.
Сейчас PHPCI доступна в двух вариантах: аренда по подписке, а так же self-hosted установка из исходного кода.
Плагины
Система написана на PHP и для PHP, поэтому «из коробки» поддерживает внушительный перечень инструментов из мира PHP по средством плагинов:
- Atoum
- Behat
- Codeception
- Composer
- PDepend
- Phing
- PHP Code Sniffer
- PHP Copy/Paste Detector
- PHP Code Sniffer Fixer
- PHP Docblock Checker
- PHP Loc
- PHP Mess Detector
- PHP Parallel Lint
- PHP Spec
- PHP Unit
а так же имеет несколько плагинов общего назначения или не связанных напрямую с PHP инструментами:
Проект довольно современный и требует версию PHP не ниже 5.3, использует PDO для подключения к базам данных и в целом, на мой взгляд, имеет простой и понятный исходный код, использующий пространства имен для классов и PSR-2 стиль для кода, что несомненно очень хорошо.
Плагины, как правило, довольно простые и небольшие по объему кода, поэтому написать собственный плагин для инструмента, который не поддерживаются в стандартной поставке, не составит большого труда.
Конфигурация проектов
Система имеет декларативный стиль описания конфигурации проектов (используется формат YAML), что довольно удобно, особенно для небольших проектов.
Файл конфигурации phpci.yml берется из корня репозитория проекта (или просто рабочей директории проекта, если речь идет о локальном источнике), так же есть возможность задать конфигурацию непосредственно в проекте PHPCI при его создании.
Ниже небольшой пример файла конфигурации phpci.yml:
build_settings:
ignore:
- "vendor"
- "tests"
setup:
composer:
action: "install"
test:
php_unit:
config:
- "phpunit.xml"
coverage: "logs/tests_coverage"
args: "--stderr"
php_mess_detector:
allow_failures: true
php_cpd:
allow_failures: true
php_loc:
allow_failures: true
php_parallel_lint:
allow_failures: true
Файл конфигурации имеет несколько корневых раздела:
build_settings
— настройки сборки проекта (игнорирование директорий, настройки подключения к базам данных)setup
— раздел инициализации сборки проекта (установка зависимостей, выполнение запросов к базам данных, миграции для баз данных)test
— раздел тестирования готовой сборки проекта (над сборкой проекта запускаются различные плагины, которые возвращают успешный или нет результат, провал, как правило, приводит к провалу сборки, хотя для отдельных плагинов это не так и можно установить количество ошибок, приводящих к провалу всей сборки)complete
— раздел, вызываемый системой после тестирования независимо от его результатаsuccess
— раздел, вызываемый системой после тестирования только в случае успешной сборки и тестирования проектаfailure
— раздел, вызываемый системой после тестирования только в случае провала сборки или тестирования проекта
Источники
Система поддерживает в качестве источника проектов: Github, Gitlab, Bitbucket, Git, Hg или локальную директорию. Svn пока не поддерживается (не уверен, что его поддержка вообще есть в планах).
Ложка дегтя
Несмотря на всю свою привлекательность, PHPCI совсем молод и много (пока) не умеет:
- как я уже писал выше, он не умеет работать с Svn
- не умеет разворачиваться на отличных от MySQL базах данных (хотя для операций в проектах уже есть плагин для PostgreSQL)
- не умеет работать при сборке с реляционными базами данных MSSQL, OracleSQL, SQLite и т.д.
- не умеет полностью разворачивать проект штатными средствами (хотя этого и можно добиться, используя Shell плагин)
- не умеет работать с NoSQL базами данных
Резюме
Мне лично проект видится очень хорошим и нужным, но пока немного сыроватым. Использовать эту систему для больших проектов пока может быть проблематичным, но с другой стороны, для небольших домашних проектов PHPCI отлично подходит уже сейчас.
Как установить систему можно узнать на странице в официальной wiki проекта.