Услышав шумиху про некую систему интеграционного тестирования hudson, который переименовали в jenkins, я захотел узнать что это и как это можно использовать. Для чего собственно он нужен? В кратце: он вытягивает последнюю версию из git/svn-репозитория и выполняет определённые действия (тестирует, выкладывает на другой сервер, делает отчёты). Всё это происходит автоматически: можно задать время, когда будет выполнятся задания. Можно почитать про пример использования jenkins.
Задача такая: Выполнение unit тестов для yii с отображением покрытия кода
Все действия проводятся на сервере debian squeeze от root.
Установка jenkins
echo "deb http://pkg.jenkins-ci.org/debian binary/" > /etc/apt/sources.list.d/jenkins.list
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
aptitude update
aptitude install jenkins
По адресу http://serverName:8080/ должен открыться jenkins.
Установка плагинов
cd /tmp
wget http://localhost:8080/jnlpJars/jenkins-cli.jar
Если от jenkins нужно, чтобы выполнял unit-тесты и делал code coverage, то достаточно установить несколько плагинов, но на самом деле их очень много.
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin xunit && \
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin clover && \
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin git
Перезапускаем jenkins:
java -jar jenkins-cli.jar -s http://localhost:8080 safe-restart
Настройка проекта
Создаём проект. Открываем Новая задача → Имя: Yii. Выбираем “Создать задачу со свободной конфигурацией” → Сохранить.
Меняем файл protected/tests/phpunit.xml
<phpunit bootstrap="bootstrap.php"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
stopOnFailure="false">
<selenium>
<browser name="Internet Explorer" browser="*iexplore" />
<browser name="Firefox" browser="*firefox" />
</selenium>
<logging>
<log type="coverage-html" target="../../build/coverage" title="prj"
charset="UTF-8" yui="true" highlight="true"
lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-clover" target="../../build/logs/clover.xml"/>
<log type="junit" target="../../build/logs/junit.xml" logIncompleteSkipped="false"/>
</logging>
</phpunit>
../../build - должен указывать на папку build в корневой папке репозитория, создавать её не нужно.
Теперь создаём конфиги, скачивая из https://github.com/Stamm/jenkins-yii/:
rm /var/lib/jenkins/jobs/yii/config.xml
sudo -u jenkins wget -O /var/lib/jenkins/jobs/yii/config.xml --no-check-certificate https://github.com/Stamm/jenkins-yii/raw/master/config.xml
sudo -u jenkins mkdir /var/lib/jenkins/jobs/yii/workspace
sudo -u jenkins wget -O /var/lib/jenkins/jobs/yii/workspace/build.xml --no-check-certificate https://github.com/Stamm/jenkins-yii/raw/master/build.xml
Чтобы наши конфиги подхватились идём в настройки jenkins и кликаем по ссылке “Пересчитать настройки из файла”. В настройках проекта yii указываем git репозиторий до нашего проекта. Можно даже указать локальный путь, но должны быть права для пользователя jenkins. Добавляем файл теста в protected/unit/
Теперь запускаем сборку. Вот как примерно это выглядит.
Уведомления по email
В конфиге jenkins указываем параметры для подключения к SMTP. Если настроен sendmail или exim, то нужно указать только от кого отсылать письмо. И теперь в настройках проекта yii указываем кому слать письмо об упавших тестах.
Авто-сборка
Можно настроить, чтобы сборки проводились автоматически. Для этого в настройках проекта yii ставим галку у Собирать периодически и в появившемся тестовом поле указываем время запуска в формате cron. Или сделать hook в git:
#!/bin/sh
echo "Running jenkins"
wget http://serverName:8080/job/yii/build > /dev/null 2>&1
P.S. Я показал только малую часть того, что может делать jenkins. Он может создавать документацию по коду, проверять на наличие дублирования в коде, проверять стиль кодирования и многое, многое другое. Примеры более сложных конфигов config.xml и build.xml
Используемые ссылки: