Перевод моей статьи о том, как настроить сборку для PHP проектов на базе Symfony2 используя Jenkins. Недавно я столкнулся с задачей такой настройки именно для набора Symfony 2.1+Jenkins+PHPUnit+PHPCodeSniffer+PHPMessDetector+PDepend.
Надеюсь, эта небольшая статья сможет оказаться полезной!
Сегодня я расскажу, как установить и настроить сборку для Symfony2 проектов, используя Jenkins и PHP шаблон для Jenkins проектов, созданный Себастьяном Бергманном.
Конфигурация работает стабильно с Jenkins v.1.480.1 и проектами на базе фреймворка Symfony v.2.1.
Требования
Перед созданием шаблона проекта вам необходимо установить требуемые плагины для Jenkins (Required Jenkins Plugins) и требуемые инструменты PHP (Required PHP Tools).
Использование PHP шаблона для Jenkins проектов
Первые шаги основаны на этой статье, но мы будем использовать config.xml, build.xml, phpunit.xml и дополнительные файлы, взятые с этого источника: github.com/xurumelous/symfony2-jenkins-template.
- загрузите jenkins-cli.jar с вашего сервера Jenkins:
wget http://localhost:8080/jnlpJars/jenkins-cli.jar
- загрузите и установите шаблон проекта:
curl https://github.com/xurumelous/symfony2-jenkins-template/blob/master/config.xml | java -jar jenkins-cli.jar -s http://localhost:8080/jenkins create-job symfony2-php-template
или добавьте шаблон вручную:
cd $JENKINS_HOME/jobs mkdir symfony2-php-template cd symfony2-php-template wget https://github.com/xurumelous/symfony2-jenkins-template/blob/master/config.xml cd .. chown -R jenkins:jenkins symfony2-php-template/
- перезагрузите конфигурацию Jenkins, например, используя Jenkins CLI:
java -jar jenkins-cli.jar -s http://localhost:8080 reload-configuration
- нажмите на “New Job” (новый проект);
- введите “Job name” (название проекта);
- выберите “Copy existing job” (копировать существующий проект) и введите “symfony2-php-template” в поле “Copy from” (копировать из);
- нажмите “OK”;
- настройте контроль версий в вашем новом проекте и другие необходимые поля/модули.
Конфигурация проекта и устранение проблем
- Измените стандартный Jenkins-PHP конфиг согласно Symfony2-Jenkins-PHP, как это описано здесь — github.com/xurumelous/symfony2-jenkins-template:
- переместите папку с Jenkins в [SYMFONY2_ROOT]/app/Resources/ внутрь вашего Symfony2 проекта;
- переместите файл build.xml в корень вашего Symfony2 приложения;
- переместите файл phpunit.xml в папку [SYMFONY2_ROOT]/app или обновите существующий файл. Блок логирования (logging node) необходим, если вы хотите профилировать и логировать отчеты модульного тестирования;
- если вы получите ошибоку «PHP Fatal error: Class ‘XSLTProcessor’ not found in /usr/share/php/TheSeer/fXSL/fxsltprocessor.php on line 58», вы можете исправить ее следующим образом:
sudo apt-get install php5-xsl
- вы также можете получить ошибку "PHP Warning: require(/var/lib/jenkins/jobs/TestJob/workspace/app/../vendor/autoload.php): failed to open stream: No such file or directory in /var/lib/jenkins/jobs/TestJob/workspace/app/autoload.php on line 5", т.к. мы используем Symfony v2.1, которой трубется composer. Вы можете устранить ее следующим способом:
- добавить шаг composer в ваш build.xml. Как это сделать в этой статье;
- если вы продолжаете получать это сообщение после добавления шага composer, возможно, вам необходимо добавить зависимость для PHPunit от composer: depends=”composer”;
- Иногда у вас может возникнуть проблема на шаге “vendors”, при которой вы увидите что-то вроде:
[exec] The deps file is not valid ini syntax. Perhaps missing a trailing newline? [exec] PHP Warning: parse_ini_file(/var/lib/jenkins/jobs/TestJob/workspace/deps): failed to open stream: No such file or directory in /var/lib/jenkins/jobs/TestJob/workspace/bin/vendors on line 69
Вы можете исправить это удалением “vendors” из зависимостей сборки (build dependency) и target-блока “vendors” в скрипте build.xml
- если вы получите результат Status: 2 во время выполнения codesniffer шага (phpcs), вам необходимо установить Symfony2 стандарт кодирования, который можно взять на этом ресурсе;
- включите опцию “Poll SCM” и впишите ниже: */5 * * * * (включив эту опцию вы даете Jenkins-у инструкцию проверять каждые 5 минут репозиторий проекта на наличие новых комм итов. Если изменения (коммиты) найдены, Jenkins автоматически запускает сборку проекта).
Это всё! Теперь вы готовы к сборке вашего PHP Symfony2 проекта с использованием Jenkins! Если вы найдёте какие-либо ошибки (или исправления), полезные ссылки или если у вас есть другие предложения, оставляйте комментарии здесь или в оригинальной статье.
Наслаждайтесь результатом!
Автор: svscorp