PHPCI: Система непрерывной интеграции для PHP-проектов

в 14:52, , рубрики: continious integration, php, метки: ,

image

Совсем недавно вышла из бета-версии новая система непрерывной интеграции для PHP-проектов с открытым исходным кодом — PHPCI (текущая версия — 1.1.0), она вскользь упоминалась в дайджесте PHP №21.

Я уже какое-то время эксперементирую с этой системой, поэтому хочу представить вам небольшой ее обзор, тем более что на Хабре нет ни одной статьи о ней.

Сейчас PHPCI доступна в двух вариантах: аренда по подписке, а так же self-hosted установка из исходного кода.

Плагины

Система написана на PHP и для PHP, поэтому «из коробки» поддерживает внушительный перечень инструментов из мира PHP по средством плагинов:

а так же имеет несколько плагинов общего назначения или не связанных напрямую с 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 проекта.

Автор: Corpsee

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js