Continuous integration с Jenkins

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
b22de57b22de57b22de57b22de5701В описании проекта картинки svg, их не убирайте, после удачной сборки они будут отображать статистику в виде графиков. Вам нужно указать источник данных, в моём случае это локальный git репозиторий. Важная деталь — jenkins пытается создать тег для сборки, я эту функцию отключаю. На скриншоте показана кнопка расширенных настроек, там нужно отметить чекбокс Skip internal tag.

3ebb37d3ebb37d3ebb37d3ebb37d01

 

Затем настраиваем наш ant, чтобы он генерировал отчёты. У меня билд скрипт находится по пути build/build.xml и вызываю дефолтный джоб build. Вы можете скачать готовый скрипт от Себастьяна, его нужно класть в корень проекта. Я предпочёл вынести все настройки в отдельную папку build, пример jenkins-sample выложил на github.

903e83f903e83f903e83f903e83f01

 

Можете указать этот пример в качестве источника и получите билд, желательно, с синим кружочком.

48db11448db11448db11448db11401

 

Так же доступна обширная статистика по качеству кода, тестам и сравнение с предыдущими сборками.

94fac5594fac5594fac5594fac5501

 

Резюме. Получилось довольно коротко, так и есть на самом деле, CI внедряется очень легко и быстро. Можно брать пример моего проекта и модифицировать его под свои, самое важное, это управлять include-exclude директориями для утилит. Можно даже запускать ant без jenkins — ant -f build/buils.xml build.

p.s. Буду вносить правки в проект, для более удобного конфигурирования, так что следите за проектом.

Continuous integration с Jenkins: 4 комментария

  1. AnrDaemon

    Вот только не надо грязными ногами по sources.list топтаться.
    Для подключения сторонних репозитариев есть каталог sources.list.d — туда и валите ваши находки. Это если PPA нужного не нашли.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *