Настройка цикла развертывания/сборки/CI для проектов PHP

Я большую часть своего времени занимаюсь разработчиком, работая над несколькими крупными, в основном PHP-проектами. Я хочу профессионализировать и автоматизировать обработку изменений в базе кода и создать процесс непрерывной интеграции, который сделает возможным переход к работе в команде без необходимости внесения фундаментальных изменений.

То, что я делаю прямо сейчас, у меня есть локальная тестовая среда для каждого проекта; Я использую SVN для каждого проекта; изменения проверяются локально, а затем переносятся в онлайн-версию, как правило, через FTP. Документация API создается вручную из исходного кода; Единичные тесты - это то, что я получаю медленно, и это еще не часть моей повседневной жизни.

"Цикл сборки", который я предвижу, будет делать следующее:

  • Набор изменений будет проверен в SVN после локального тестирования.

  • Я начинаю процесс сборки. Редакция SVN HEAD проверяется, при необходимости изменяется и готова к загрузке.

  • Документация API создается автоматически - если я еще не установил ее подробно, используя шаблон по умолчанию, сканирование всей базы кода.

  • Новая версия развертывается в удаленном месте через FTP (включая некоторые переименования каталогов, chmodding, импорт баз данных и т.д.) Это то, что мне уже нравится phing, но я открыт для альтернатив, конечно.

  • Запускаются те тесты, которые находятся в предопределенном месте. Мне сообщили об их неудаче или успехе, используя E-Mail, RSS или (желательно) вывод HTML, который я могу захватить и разместить на веб-странице.

  • (необязательно) текстовый файл "изменённый" конечного пользователя в предварительно определенном месте обновляется с заранее определенной частью сообщения фиксации ( "Теперь можно фильтровать как" foo ", так и" bar" в то же время). Это сообщение не обязательно совпадает с сообщением о передаче SVN, которое, вероятно, содержит гораздо больше внутренней информации.

  • Такие вещи, как метрики кода, проверка стиля кода и т.д., не являются моим основным направлением прямо сейчас, но в долгосрочной перспективе они, безусловно, будут. Решения, которые приносят этот готовый продукт, очень любезно смотрятся.

Я ищу

  • Обратная связь и опыт от людей, которые находятся или находятся в аналогичной ситуации, и успешно внедрили решение для этого

  • В частности, хорошие пошаговые руководства и пошаговые руководства о том, как установить это.

  • Решения, обеспечивающие максимально возможную автоматизацию, например, путем создания API-интерфейса скелета, тестовых примеров и т.д. для каждого нового проекта.

а также

  • Рекомендации по продукту. То, что я знаю до сих пор, phing/ant для построения, и phpUnderControl или Hudson для части отчета. Мне все они нравятся, насколько я могу судить, но у меня, конечно, нет подробного опыта с ними.

Я заботился о работе, поэтому у меня есть сильная склонность к простым решениям. С другой стороны, если функция отсутствует, я буду кричать, что она слишком ограничена. Решения "точка-и-клик" приветствуются. Я также рекомендую коммерческие продукты, которые могут работать с проектами PHP.

Моя настройка

Я работаю на Windows локально (7, если быть точным), и большинство клиентских проектов запускаются в стек LAMP, часто на общем хостинге (= без удаленного SSH). Я ищу решения, которые я могу запустить в своей собственной среде. Я готов настроить виртуальную машину Linux для этого, без проблем. Хостинговые решения интересны для меня, только если они обеспечивают все описанные аспекты или достаточно гибки, чтобы взаимодействовать с другими частями процесса.

BountyЯ принимаю ответ, который, как мне кажется, даст мне самый большой пробег. Здесь много отличного ввода, я бы хотел принять более одного ответа. Спасибо всем!

Ответ 1

Я прошел через buildbot, CruiseControl.net, CruiseControl и Hudson. Все, хотя мне очень понравился CruiseControl *, это было слишком много хлопот с действительно сложными случаями зависимости. buildbot нелегко настроить, но он получил хорошую ауру (я просто как питон, все). Но Хадсон выиграл первые три, потому что:

  • Просто настроить
  • Легко настроить
  • Он выглядит хорошо и имеет хорошую обзорную функциональность.
  • Он получил обновления "точка-и-клик", для себя и всех установленных плагинов. Это действительно приятная функция, которую я ценю все больше и больше.

Предостережение: я только использовал linux в качестве базы для вышеупомянутых серверов сборки (CC.net работал на mono), но они должны все - в соответствии с документами - запустить кросс-платформу.

Настройка hudson-сервера

Предпосылки:

  • Java (1.5 будет вам просто отлично)
  • Чтение доступа к серверу subversion (у меня есть отдельная учетная запись для пользователя hudson)

Отсюда просто:

java -jar hudson.war

Это запустит экземпляр небольшого сервера прямо с вашей консоли, и вы сможете просмотреть установку на своем http://localhost:8080, если у вас нет чего-либо еще на этом порту заранее (вы можете указать другой порт передав опцию --httpPort=ANOTHER_HTTP_PORT указанной выше команде), и все было хорошо в процессе установки.

Если вы перейдете в каталог доступных плагинов (http://localhost:8080/pluginManager/available), вы найдете плагины для поддержки ваших вышеупомянутых задач (поддержка subversion устанавливается по умолчанию).

Если у вас есть аппетит, вы должны установить сервер приложений Java, например tomcat или jetty. Инструкции по установке доступны для всех основных серверов приложений

Обновление: Kohsuke Kawaguchi построил установщик Windows для hudson

Настройка проекта в hudson

Ссылки в следующем прохождении предполагают запущенный экземпляр hudson, расположенный в http://localhost:8080

  • Выберите новое задание (http://localhost:8080/view/All/newJob) в меню слева.
  • Дайте задание имя и отметьте Build a free-style software project в списке
  • Нажатие "ok" приведет вас к странице конфигурации задания. У всех вариантов есть небольшой вопросительный знак, кроме них. Нажав на это, вы получите текст справки об этой опции.
  • В группе параметров "Управление исходными кодами" вы будете использовать Subversion. Хадсон принимает как доступ к url, так и доступ к локальному модулю.
  • В группе параметров "Build Triggers" вы должны использовать "Poll SCM". Используемый здесь синтаксис состоит из cron, поэтому опрос репозитория subversion каждые 5 минут будет */5 * * * *
  • Процесс создания проекта указывается в группе параметров "Построить". Если у вас уже есть файл сборки ant со всеми целями, которые вам нужны, вам повезло. Просто выберите "Invoke ant" и напишите имя цели. Группа опций также поддерживает команды maven и shell, но также доступен плагин для phing.
  • Отметьте дополнительные действия по сборке в "Действиях после сборки", например уведомления по электронной почте или архивирование артефактов сборки.

Для настройки процессов, для которых у hudson нет плагинов, вы можете вызвать их непосредственно через оболочку script из встроенной сборки или вы можете напишите свой плагин

Ловушки:

  • Если у вас есть производные артефакты сборки, не забудьте регулярно очищать hudson после себя.
  • Если у вас установлено более 20 проектов, подумайте о том, чтобы не отображать статус сборки как главную страницу по умолчанию на hudson

Удачи!

Ответ 2

Термин, который вы ищете, - это "непрерывная интеграция".

Вот пример того, кто использует GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl (который является сервером CI), может использовать Hosted SVN/ GIT в качестве источника. Поэтому вы можете использовать его с GitHub или Beanstalk или что-то еще.

Затем вы можете интегрировать это со следующим программным обеспечением:

  • PHPUnit
  • PHP-codesniffer
  • PhpDocumentor
  • PHP Gcov
  • PHPXref
  • Yasca
  • и др.

Вы также можете попробовать этот размещенный CI: http://www.php-ci.net/hosting/create-project

Имейте в виду, что эти инструменты нуждаются в специальной поддержке, если вы сами их интегрируете.

Вы также думали о управлении проектами и управлении исправлениями?

Вы можете использовать Redmine для управления проектами. Он интегрировал поддержку непрерывной интеграции, но только на стороне клиента (а не на сервере CI).

Попробуйте использовать размещенный SVN/ GIT/etc. потому что они будут охватывать ваши резервные копии и поддерживать работу своих серверов, поэтому вы можете сосредоточиться на разработке.

Для руководства по настройке Хадсона см.: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

Ответ 3

Я использую Atlassian Bamboo непрерывный сервер интеграции для моего основного проекта PHP (наряду со своими другими продуктами, такими как fisheye (просмотр репозитория), jira (проблема отслеживания) и clover (покрытие кода)).

Он поддерживает SVN и теперь поддерживает Git и имеет отличный пользовательский интерфейс. Он доступен для linux, windows и mac и может работать автономно на собственном сервере tomcat, который отлично подходит для людей (таких как я), которым не нравится принимать дни, чтобы настроить свои инструменты). Хотя это может показаться дорогим, будучи одиноким разработчиком, я приобрел лицензию стартового комплекта на 10 $(10 $по программному обеспечению). Это отлично подходит для небольших команд, и это стоит того, чтобы выглядеть.

Ответ 4

PHPTesting PHPCI Это хороший сервер непрерывной интеграции, встроенный в php.

Плюс, его свободный и открытый исходный код.:)

у него есть количество плагинов.

PHPCI включает в себя плагины интеграции для:

  • Atoum
  • Behat
  • Костер
  • Codeception
  • Composer
  • Email
  • Grunt
  • IRC
  • PHP
  • Lint
  • MySQL
  • PDepend
  • PostgreSQL
  • Устранение PHP-кода
  • PHP Copy/Paste Detector
  • PHP Spec
  • Модуль PHP
  • Команды оболочки
  • Тар/Почтовый индекс

Ответ 5

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

Я запускаю среду TEST в parrallel с моей средой PROD. У меня нет локального тестирования как такового. Если это слишком сложно получить в реальной среде TEST, я исправлю процесс сборки. Я не вижу смысла в тестировании локально, так как среда отличается. ОБНОВЛЕНИЕ: Единственное, что я делаю локально, - запустить "php -l", прежде чем я загружу что-нибудь. Останавливает глупые ошибки.

Процесс сборки работает со всем, что находится в текущем рабочем пространстве, которое включает незафиксированный код. Это не все чашки чая, но я собираюсь тестировать очень часто. Перед тем, как перейти в PROD, все будет совершено.

Часть моего процесса сборки (аналогичная вашему) создает два файла META. Один содержит последние (обычно) 100 изменений, а также дает мне текущий список изменений. Показывает, какие изменения установлены. Другой содержит CLIENTSPEC (в Perforce), который показывает мне, какие ветки были использованы в этой сборке. Вместе они дают мне воспроизводимые сборки.

Я не строю прямо в целевую среду, а в промежуточную область на сервере. Я использую SSH, поэтому это имеет смысл. Это дает мне несколько преимуществ. Самое главное, это позволяет избежать смерти на полпути через большую загрузку. Он также дает мне место для хранения файлов META, и все файлы сборки автоматически архивируются (поэтому я могу вернуться к любой сборке). script также регистрирует обновление (поэтому есть запись в лог-потоке, и я могу видеть pre- и post-) и пинает всех демонов (я использую daemontools так "svc -t" ). Все это лучше на целевой машине.

Еще одна проблема заключается в изменении БД. Я сохраняю мастер script схемы БД, который я обновляю каждый раз при изменении схемы. Каждое из изменений также переходит в change.sql script, который загружается с помощью сборки в промежуточную область. script выполняется как часть установки script.

Ответ 6

В основном я администратор sys, но иногда я также программирую PHP. В качестве побочного проекта я создал несколько сценариев, которые сделают простым и безболезненным создание полноценной среды PHP CI с использованием Jenkins. Он также запускает образец проекта для вас, чтобы вы могли видеть, как настроен каждый шаг сборки.

Если вы хотите попробовать все, что вам нужно, это окно Debian/Ubuntu и доступ к оболочке.

http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

Обновление Чтобы добавить некоторый контент в мой ответ:

Вы можете просто настроить Jenkins CI для PHP с помощью Ansible. Так как v1.4 поддерживает роли, которые вы можете скачать со своего сайта galaxy.ansibleworks.com, и он сделает тяжелую работу для вас. Он называется jenkins-php.

Ответ 7

Я бы предложил использовать Jenkins http://jenkins-ci.org/ бесплатно и открыть исходный код.

Это довольно простой способ настройки, работы на нескольких платформах и хорошо интегрируется с другими инструментами непрерывной интеграции, такими как SonarQube (+ SQUALE) для измерения технического долга и Thucydides для автоматизации тестирования.

Я бы предложил использовать GIT или GIT концентратор для управления версиями вместо SVN. С моей точки зрения, это просто улучшенная система контроля версий, которая поможет вам в дальнейшем наращивать ваши усилия в области развития.

Поскольку вы работаете в основном с проектом PHP, есть и другие инструменты, которые вы можете использовать.

PHPUnit - для модульного тестирования

PHP CodeSniffer - проверка стандартов кодирования

PHP Depend - показывает зависимости PHP-кода

XDEBUG - для тестирования производительности

Все эти инструменты и запускаются с заданием Jenkins и помогают с качеством и производительностью вашего кода.

Удачи и наслаждайтесь!

Ответ 8

Я недавно начал такой же процесс и использую Beanstalk для хостинга svn.

В платных аккаунтах есть две отличные функции (начинайте с 15 вечера, я думаю):

  • развертывание позволяет пользователю создавать целевые объекты ftp для серверов постановки и производства, которые могут быть развернуты одним нажатием кнопки (с указанием ревизии и ветки)
  • webhooks позволяет пользователю настраивать URL-адрес, который вызывается при каждом фиксации/развертывании, передавая такие вещи, как номер версии, описание и пользователь. Это можно использовать для обновления документации, выполнения модульных тестов и обновления списков изменений.

Я уверен, что есть другие хостинг-серверы с svn-серверами с этими двумя функциями, но beanstalk - это тот, который у меня есть, и он работает очень хорошо.

Также существует API, который, как я полагаю, может быть использован для интеграции развертывания в ваш процесс.

Ответ 9

Рассмотрим fazend.com - бесплатную размещенную платформу CI, которая автоматизирует процедуры настройки и установки. Вам не нужно настраивать контроль версий, отслеживание ошибок, сервер CI, тестовую среду и т.д. Все делается по требованию.