Continuous integration или непрерывная интеграция — это практика создания автоматизированной сборки проекта. Хотя это и звучит как-то заковыристо, но это то, что программист делает ежедневно. Мы пишем код и проверяем его на синтаксические ошибки, на соответствие стилю кодирования, прогоняем тесты, боремся с copy-past и тд. и т.п. В PHP существует масса инструментов. позволяющих это автоматизировать, в PEAR есть пакет phpqatools, который ставит сразу пачку таких утилит. Но прогонять их руками неудобно, к тому же хочется иметь какой-то графический интерфейс, чтобы просматривать отчёты, чтобы наблюдать как изменяется проект, иметь возможность смотреть на старые версии и т.д. Здесь на помощь приходит Jenkins.Jenkins не единственный инструмент, но он открыт и бесплатен и Sebastian Bergmann подготовил всё для интеграции его с PHP. Открываем Template for Jenkins Jobs for PHP Projects, там практически всё написано, я лишь перескажу и покажу чуть адаптированный вариант.
Ставим набор утилит для анализа кода
pear config-set auto_discover 1 pear install pear.phpqatools.org/phpqatools pear.netpirates.net/phpDox
Затем ставим ant и jenkins, последний лучше брать самый свежий с официального сайта
добавляем в /etc/apt/sources.list #Jenkins deb http://pkg.jenkins-ci.org/debian binary/ sudo apt-get update sudo apt-get install ant jenkins
Когда Jenkins установлен, он доступен по адресу http://localhost:8080/, рулить им можно через сервис service jenkins (start|stop….)
Теперь нужно добавить плагины, для этого можно воспользоваться либо веб интерфейсом, а удобнее через cli.
wget http://localhost:8080/jnlpJars/jenkins-cli.jar java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin \ checkstyle cloverphp dry htmlpublisher jdepend plot pmd violations xunit java -jar jenkins-cli.jar -s http://localhost:8080 safe-restart
Теперь можно составлять свой шаблон отчётов, а лучше воспользоваться готовым
curl https://raw.github.com/sebastianbergmann/php-jenkins-template/master/config.xml | \ java -jar jenkins-cli.jar -s http://localhost:8080 create-job php-template
Теперь, зайдя в панель Jenkins, вы увидите наш шаблон проекта, но его использовать не стоит, а нужно создать новый проект, скопировав его с php-template
В описании проекта картинки svg, их не убирайте, после удачной сборки они будут отображать статистику в виде графиков. Вам нужно указать источник данных, в моём случае это локальный git репозиторий. Важная деталь — jenkins пытается создать тег для сборки, я эту функцию отключаю. На скриншоте показана кнопка расширенных настроек, там нужно отметить чекбокс Skip internal tag.
Затем настраиваем наш ant, чтобы он генерировал отчёты. У меня билд скрипт находится по пути build/build.xml и вызываю дефолтный джоб build. Вы можете скачать готовый скрипт от Себастьяна, его нужно класть в корень проекта. Я предпочёл вынести все настройки в отдельную папку build, пример jenkins-sample выложил на github.
Можете указать этот пример в качестве источника и получите билд, желательно, с синим кружочком.
Так же доступна обширная статистика по качеству кода, тестам и сравнение с предыдущими сборками.
Резюме. Получилось довольно коротко, так и есть на самом деле, CI внедряется очень легко и быстро. Можно брать пример моего проекта и модифицировать его под свои, самое важное, это управлять include-exclude директориями для утилит. Можно даже запускать ant без jenkins — ant -f build/buils.xml build.
p.s. Буду вносить правки в проект, для более удобного конфигурирования, так что следите за проектом.
ХОРОШАЯ СТАТЬЯ, СПАСИБО!!!
Вот только не надо грязными ногами по sources.list топтаться.
Для подключения сторонних репозитариев есть каталог sources.list.d — туда и валите ваши находки. Это если PPA нужного не нашли.
Что-то я в статье не нашел собственно CI
Еще очень полезно добавить в работу с Jenkins мониторинг билдов.
Есть для этого CCMenu (http://ccmenu.org) и Catlight (https://catlight.io).
Сам пользуюсь Catlight, т.к. больше функционал и просто удобнее.