Автоматическое развертывание 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/