Пользователь
0,0
рейтинг
5 февраля 2013 в 16:41

Разработка → Сборка Symfony2 проектов с использованием Jenkins перевод tutorial

Перевод моей статьи о том, как настроить сборку для 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.
  1. загрузите jenkins-cli.jar с вашего сервера Jenkins:
    wget http://localhost:8080/jnlpJars/jenkins-cli.jar
  2. загрузите и установите шаблон проекта:
    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/

  3. перезагрузите конфигурацию Jenkins, например, используя Jenkins CLI:
    java -jar jenkins-cli.jar -s http://localhost:8080 reload-configuration

  4. нажмите на “New Job” (новый проект);
  5. введите “Job name” (название проекта);
  6. выберите “Copy existing job” (копировать существующий проект) и введите “symfony2-php-template” в поле “Copy from” (копировать из);
  7. нажмите “OK”;
  8. настройте контроль версий в вашем новом проекте и другие необходимые поля/модули.


Конфигурация проекта и устранение проблем


  1. Измените стандартный 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) необходим, если вы хотите профилировать и логировать отчеты модульного тестирования;

  2. если вы получите ошибоку «PHP Fatal error: Class ‘XSLTProcessor’ not found in /usr/share/php/TheSeer/fXSL/fxsltprocessor.php on line 58», вы можете исправить ее следующим образом:
    sudo apt-get install php5-xsl
  3. вы также можете получить ошибку "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. Как это сделать jописано в этой статье;
    • если вы продолжаете получать это сообщение после добавления шага composer, возможно, вам необходимо добавить зависимость для PHPunit от composer: depends=”composer”;

  4. Иногда у вас может возникнуть проблема на шаге “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
  5. если вы получите результат Status: 2 во время выполнения codesniffer шага (phpcs), вам необходимо установить Symfony2 стандарт кодирования, который можно взять на этом ресурсе;
  6. включите опцию “Poll SCM” и впишите ниже: */5 * * * * (включив эту опцию вы даете Jenkins-у инструкцию проверять каждые 5 минут репозиторий проекта на наличие новых комм итов. Если изменения (коммиты) найдены, Jenkins автоматически запускает сборку проекта).


Это всё! Теперь вы готовы к сборке вашего PHP Symfony2 проекта с использованием Jenkins! Если вы найдёте какие-либо ошибки (или исправления), полезные ссылки или если у вас есть другие предложения, оставляйте комментарии здесь или в оригинальной статье.

Наслаждайтесь результатом!
Перевод: Ilia Shakitko
Ilia Shakitko @svscorp
карма
10,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (19)

  • 0
    Не осилил ваш перевод, ушел читать оригинал. Хотя тема полезная.
    • 0
      Поделитесь в приват, что вызвало непонимание. Я использую фидбек для развития стиля изложения и будущих статей :)
      • 0
        хоть у Вас всё понятно (можно сказать идеально), но некоторым людям легче уже воспринимать текст на инглише
  • 0
    Как-то «сборка» и «php/symfony» у меня в голове слабо связываются в принципе. Что имеется в виду? Разогрев кэша перед деплоем?
    • 0
      PHPUnit+PHPCodeSniffer+PHPMessDetector+PDepend.

      Походу оно гоняет тесты.
      • 0
        Да. Тесты + проверки по стандарту кодирования Symfony, PSR… (настраивается в скрипте build.xml дополнительно). Плюс показывает избыточные моменты, слишком большие классы, тяжесть логики и т.д.
    • 0
      Имеется ввиду проверка проекта перед продакшном + статистика по покрытию кода тестами, соответствию стандарту. Любой коммит вызывает «сборку», если разработчик забыл где-то die(), не задокументировал новые методы или классы, допустил синтаксическую ошибку или сломал другую часть кода своим изменением — он об этом сразу же узнает.
      • 0
        А в чём преимущества Jenkins перед простым хуком на коммит в ту или иную ветку?
        • 0
          На мой взгляд, в аккумуляции всех проверок коммита в одном месте и визуальном представлении. Я занимался этим вопросом и решил проработать такой вариант. Делюсь результатом :) В принципе, команда оценила результат!
        • 0
          В том что можно сразу всей команде рассылать уведомления о том что свалилось. Скажем вы весь день работали над кодом, а ночью Дженкинс прогоняет все проекты, делает отчет и отправляет всей команде, что бы утром вы могли сразу же увидеть что да как. Если у вас в проекте задействовано много людей, то такая штука может здорово помочь организовать работу. А вообще это по сути стандарт де-факто, как Jira для управления проектами.
          • 0
            То есть ориентация больше на большие команды?
            • 0
              Ну если рассматривать в контексте PHP то пожалуй да, хотя я не могу сказать точно. Просто мне сложно представить кейс когда одному или двум разработчикам может понадобится дженкинс. Уверен что есть исключения, но все же в PHP нет такого этапа как сборка проекта. А вот если речь идет о программах/библиотеках которые собираются по часу и больше, или же таких программ много — удобнее оставить это на ночь, а с утра у всех будут отчеты по своим проектам.

              У меня к сожалению не так много опыта в работе с CI.
            • 0
              Я бы не сказал так. Я пробую это в небольшой скрам команде из 6-и человек. Но в большой команде это может быть еще более актуальней.
    • 0
      Но, конечно, «сборка» для php, понятие не обычное :)
      • 0
        Наверное, стоило бы об этом сначала пост написать :) Или ЦА чисто те, кто знает что это и зачем? И популяризация CD/CI в мире PHP в ваши цели не входит?
        • +1
          Это великолепная идея! Спасибо за идею.

          Отвечая на ваш вопрос, популяризация CD/CI это одна из мотиваций написать и перевести эту статью.
          • 0
            Пожалуйста :)

            Могу даже помочь с примерным планом статьи, как человек о CD/CI для «серьезных» языков что-то слышавший, но о возможности применения в PHP не задумывавшийся, вернее, прикинув что слышал в основном с упором на автоматическую компиляцию — отбросил.
  • 0
    Кусочек «забыл»: добавить шаг composer в ваш build.xml. Как это сделать в этой статье;
    Без ссылок/кода
    • 0
      Спасибо, поправил.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.