Статьи

Непрерывная интеграция с PHP-CI

Создание приложения — это одно. Поддержание определенного уровня качества — это совсем другое. В наши дни вы можете найти множество инструментов, которые помогут вам поддерживать качество вашего приложения в форме. Запуск этих инструментов один за другим может занять очень много времени. Для этого вы можете установить так называемые службы непрерывной интеграции (CI). PHPCI — один из них, и в этой статье мы углубимся в него.

Сервис непрерывной интеграции

Служба непрерывной интеграции — это приложение, которое запускает определенные инструменты проверки качества в соответствии с вашим кодом. Например, CI может использовать ваш git-репозиторий. После этого он запускает модульные тесты, проверяет ваш код на наличие проверок и создает отчеты на его основе. Как правило, CI работает в определенные промежутки времени или при каждом нажатии. Наиболее часто встречающаяся ситуация возникает сразу после создания запроса на слияние. Проверяя запрос на слияние, код проверяется перед слиянием, чтобы убедиться, что вы не принимаете код, который может нарушить функциональность. Таким образом, интеграция CI в вашу процедуру разработки может гарантировать, что плохой код не попадет в ваш основной репозиторий, и вы сможете автоматически проверять, если все соответствует вашим требованиям, прежде чем принимать изменения.

Установка

Установка может быть выполнена двумя разными способами. Либо вы загружаете последнюю версию, либо вы следуете руководству по установке . Я решил пойти с руководством по установке и установить его через Composer. После запуска composer update вы можете запустить скрипт установки. Вас попросят ввести учетные данные базы данных и ваш адрес электронной почты. Когда это сделано, пользователь создается с указанным адресом электронной почты.

Вам также нужно установить cronjob, чтобы сборки запускались автоматически.

Настроить

В зависимости от того, что вы хотите сделать, вам нужно установить некоторые инструменты. После входа в систему вы можете перейти к admin manage plugins и установить любые необходимые плагины. Устанавливая плагин, вы обновляете файл composer.json с новыми требованиями. Поэтому сразу после установки плагинов необходимо запустить composer update чтобы фактически установить эти плагины.

Plugins

Добавить проект

Нажав кнопку « add project в заголовке, вы можете создать новый проект. Вы должны заполнить простую форму, которая указывает, где находится код. Вы можете выбирать между различными видами услуг, такими как Github и Bitbucket, а также для своих собственных удаленных или локальных URL-адресов. Если в вашем репозитории нет файла конфигурации phpci.yml , вам необходимо phpci.yml конфигурацию сборки. В его конфигурации вы определяете, как проект должен быть настроен, какие инструменты вы хотите запустить и как завершить сборку.

Каждый процесс сборки состоит из 5 этапов.

  1. Настроить. Этап, где все инициализировано
  2. Тестовое задание. Этап, на котором все тесты выполнены
  3. Полная. Успех или неудача, эта часть всегда будет работать
  4. Успех. Будет запущен только в случае успеха
  5. Провал. Будет запущен только в случае сбоя

Я буду использовать этот проект в качестве нашего проекта. Мы хотим игнорировать каталоги по умолчанию, такие как app и vendor . Установка будет выполнена через Composer. Проект должен быть PSR2-совместимым, иметь модульные тесты и содержать приличные докблоки. Мы также хотим проверить, в целом ли хорошее качество, запустив PHPMD, PHPCPD и PHPLoc.

PHPCI способен обрабатывать тестовую базу данных. Однако проект, который мы используем в нашем примере, не имеет никаких функциональных тестов, поэтому мы не будем использовать соединение MySQL.

Давайте посмотрим, как будет выглядеть конфигурация.

 build_settings: ignore: - "vendor" - "bin" - "app" setup: composer: action: "install" test: php_unit: config: - "app/phpunit.xml.dist" coverage: "coverage" args: "--stderr" php_mess_detector: allow_failures: true php_code_sniffer: standard: "PSR2" php_cpd: allow_failures: true php_docblock_checker: allowed_warnings: 10 skip_classes: true php_loc: directory: "src" 

После создания проекта вы должны убедиться, что PHPCI способен извлекать проект из Github. В этом случае я добавил ключ SSH, который PHPCI предоставил мне для моей учетной записи Github. Когда вы закончите, вы можете нажать кнопку сборки, чтобы начать сборку проекта.

Результаты сборки

Когда сборка будет завершена, проект получит цвет, соответствующий статусу на странице обзора. Вы получите четкое представление о предыдущей сборке, последнем коммите и текущей ветке. Нажав на идентификатор сборки, вы можете увидеть подробные результаты сборки.

Overview

Пора поближе познакомиться с результатами одной сборки. В верхней части страницы вы должны увидеть два небольших графика. Одна будет отображать строки кода, а другая будет отображать тренд качества. График тенденции качества содержит обзор всех инструментов, таких как PHPMD и PHPCPD.

Graph
К сожалению, мне не удалось заставить PHPLoc работать правильно

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

PHPUnit

В случае сбоя PHPCI четко укажет, что не так, получая отзывы от инструмента. В моем случае в PHPMD было несколько строк, которые, по их мнению, можно улучшить. PHPCI показывает мне, какой файл и что это за сообщение. Кроме того, я могу щелкнуть файл, чтобы перейти прямо в мой репозиторий Github.

PHPUnit

Все инструменты, которые я использовал, давали мне обратную связь. Таблицы, которые являются пустыми, где успешно, таблицы, которые были заполнены, имели некоторые улучшения.

Вывод

Конечно, PHPCI может сделать больше, чем было описано выше. Если вас интересуют все его возможности, ознакомьтесь с их документацией . По сути, он может использовать любой инструмент PHP QA, который вы знаете.

Итак, каков мой окончательный вердикт? Я использовал много инструментов в прошлом. Год назад я был убежден, что не было ни одного инструмента, который мог бы победить Дженкинса. До сегодняшнего дня я все еще верю, что Дженкинс — один из лучших инструментов КИ. Дженкинс способен выполнять все виды проектов, не только основанные на PHP. Для меня это огромное преимущество, когда вы имеете дело с приложениями JS, iOS и Java. Jenkins полнофункциональный, содержит множество плагинов и способен создавать хорошие графики о качестве вашего проекта. Ему не хватает только красивого и структурированного дизайна и простой конфигурации.

Я также люблю Трэвис в сочетании со Scrutinizer и SensioLabs Insight . Вместе они могут дать мне много отзывов о моем коде и выполнить все виды проверок. Однако, если вы не работаете с проектами с открытым исходным кодом, вам придется заплатить за все три службы, чтобы они работали.

Итак, является ли PHPCI хорошим дополнением к этой линейке инструментов? Да, я верю в это. Они действительно пытаются нацелиться на сообщество PHP и предлагают одно-единственное место для проведения всевозможных проверок. Кроме того, он уже может создавать некоторые графики, чтобы дать краткий обзор качества вашего проекта.

Не забывайте, PHPCI еще не исполнился год, и это то, что вы заметите. Для установки плагина необходимо запустить composer update , а это значит, что вам все равно нужно войти на свой сервер. Кроме того, дизайн иногда действительно не работает, особенно когда вы устанавливаете пакет и вам нужно выбрать версию.

Plugins

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

Самым разочаровывающим моментом для меня стал тот факт, что я получил сообщения типа « Plugin Status: Success и « Plugin Status: Failed в моей консоли, и сборка выдала мне пустую таблицу.

PHPUnit

Я полагал, что это означало, что это так или иначе не могло запустить инструмент как PHPUnit. Тем не менее, он говорит вам, если PHPUnit действительно успешно или не удалось. Успех также приводит к пустой таблице, поэтому у вас практически нет обратной связи в самом PHPCI. Было бы хорошо, если бы он просто сказал что-то вроде: «все в порядке…. двигаться дальше! »или, по крайней мере, дал мне результаты PHPUnit.

Наконец, приятно видеть, что разработчики также расширяют его с помощью пользовательских инструментов. Например, они создали плагин docblock . На данный момент, я считаю, что он только проверяет, присутствует ли докблок или нет. Было бы неплохо, если бы в будущем они могли проверить все докблоки, чтобы соответствовать будущему стандарту PSR-5 .

Если вы не хотите настраивать Jenkins или у вас есть частный проект, и вы разрабатываете только проекты PHP, PHPCI может быть инструментом, который вы ищете. Лично я бы подождал немного дольше, пока они не улучшат дизайн приложения, прежде чем использовать его в реальном проекте. Иногда это кажется немного неуклюжим, потому что дизайн неясен или нет правильного описания.

Вы в настоящее время используете инструмент CI? Как вы думаете, PHPCI может заменить ваш текущий CI? Я хотел бы услышать от вас в комментариях ниже.