Автоматическое развертывание PHP в среде CI (Jenkins)

В настоящее время я изучаю настройку сильной среды CI и развертывания для проекта, совместно используемого небольшой командой разработчиков. Цель состоит в том, чтобы привести некоторую согласованность в том, как все протестировано, в общем качестве кода и способах развертывания.

Я читал о Дженкинсе, Сонаре, Мейвене, Капистрано, Финге, ANT,... и, честно говоря, я теряюсь в середине всех этих инструментов/технологий и хотел бы, чтобы вы подтвердили мое понимание и дать мне некоторое представление о наилучшем способе достижения этого.

То, что я уже установил до сих пор:

  • Git: мы используем git как систему управления версиями и имеем ветвь "development" для всех новых разработчиков, которые необходимо проанализировать с помощью инструмента CI.
  • Jenkins: Jenkins запускается с помощью git hook (на ветке разработки) и выполняет PHING script выполнение следующих действий

    • Lint: проверка выполнения кода PHP, анализатор кода
    • PHPLoc: получите некоторую статистику о PHP-коде (сложность, степень)..
    • PDepend: анализ кода (не уверен в различии с PHPLoc)
    • phpmd: детектор беспорядка (неиспользуемые параметры, сложный код...)
    • phpcpd: определение кода копирования вставки
    • PHPcs: проверка стандартов кодирования
    • Phpdox: создание документации PHP
    • Php_Codebrowser: создайте просматриваемое представление кода PHP с основными моментами нарушений...
    • PHPUnit: запуск тестов PHP

    Затем Дженкинс отправляет все отчеты/данные в Сонар, не говорящий о сонаре.

  • Sonar собирает все эти данные, сохраняя их в базе данных, которая предлагает способ анализа эволюции вашего кода приложения с течением времени. Он также отображает информацию лучше, чем Дженкинс.

Отсутствующие блоки

  • Автоматическое развертывание в QA: Я хотел бы автоматизировать развертывание в QA env, когда сборка script будет успешной (основанной на успехе теста). Это должно спровоцировать процесс вытаскивания правильных данных в QA, внесение изменений в БД и возможную очистку файлов/папок и настройку прав доступа.
  • Автоматизировать развертывание в PROD. Это должно быть сделано так же, как указано выше, но на основе ведущей ветки. Мы также должны добавить еще один раунд тестирования на этот PROD env после развертывания.

Обзор инструментов

  • Git: не нужно объяснять это, все о версировании
  • Jenkins: инструмент CI, который автоматизирует сборку (проверка кода + тестирование)
  • Sonar: инструмент для создания отчетов (визуализация данных сборки с течением времени)
  • Maven: не уверен в этом. Это недостающая часть для развертывания? Или другой инструмент отчетности?
  • Capistrano: инструмент развертывания

Ваш вход: -)

  • Ваша точка в моей общей настройке для CI (имеет ли смысл, использую ли я правильные инструменты?)
  • Что из вашего опыта - лучшие инструменты для развертывания?
  • Поскольку Дженкинс - своего рода "диспетчер" в этой общей схеме CI/Deployment, это тот, который запускает развертывание? Если да, я предполагаю, что можно инициировать некоторые действия на основе состояния сборки (успех/сбой)?

Большое спасибо за ваше время и помощь!

Ответы

Ответ 1

Выглядит хорошо. Я лично не использовал Sonar (но знал об этом) или Capistrano (даже не слышал об этом), поэтому не могу комментировать их.

Maven - это инструмент зависимости, сборки и развертывания, в основном для проектов Java. Вы уже заботитесь о "сборке" с Дженкинсом, так что не беспокойтесь о Maven.

Что касается развертывания, я написал подробное объяснение здесь, как развернуть сборки Jenkins. Дженкинс вполне способен сделать ваше развертывание, так зачем беспокоиться о том, чтобы добавить еще один инструмент в микс? Единственное, что вам нужно - это bash (или пакетный, в зависимости от вашей среды) script взять ваши файлы PHP (я советую закрепить их как часть задания сборки) и скопировать/развернуть их на удаленном сервере,

Если у вас есть более конкретный вопрос, спросите прочь.

Ответ 2

Есть несколько служб для автоматического развертывания, насколько я знаю, и их гораздо проще настроить. Так, например, он может быть интегрирован в Dropbox и автоматически разворачивать код в repos/live, даже если на нем работает несколько разработчиков. Пример: http://unbouncepages.com/the-magicbox/