2009-06-15 3 views
9

Наличие «единственной толчки» для внесения ваших изменений из среды разработки на живой сервер - это одна вещь, которую очень приятно иметь и часто защищать.Как вы реализуете «одноэтапную сборку» для проекта LAMP?

Я пришел на борт с небольшой командой, работающей в стеке LAMP, и использовал SVN для управления версиями, который в настоящее время развернут на одном производственном сервере (другой сервер для разработки и вскоре станет отдельным сервером mysql). Я только что собираю много организационных вещей, которые были упущены до того, как я пришел на борт.

Мне любопытно увидеть

  1. , как люди делают это (один шаг сборки) в настоящее время
  2. посмотреть, как я могу реализовать это лучше для моей ситуации (небольшая команда, LAMP среды с SVN)

Некоторые специфические проблемы, которые меня интересуют, будут обрабатывать изменения базы данных (схемы), а также, если и какие «пакеты» используются людьми, чтобы держать вещи организованными (например, RPM, PEAR и т. Д.).

ответ

7

Мы использовали ant с Hudson. Работал как шарм.

Hudson также будет работать с другими системами сборки, а не только с проектами java. Он позволяет настраивать несколько целей сборки и запускать их автоматически или вручную. Это также заставляет вас реализовать способ запуска вашей сборки из одной команды.

Он не решает проблемы связи, при которых сервер будет недоступен в течение времени, необходимого для запуска сборки для развернутого сервера.

Для наших обновлений схем и изменений, мы настроим наш муравей скрипт, чтобы сделать две вещи:

  1. Update запустить схему, только если есть разница в SVN.
  2. Проверка дампа схемы после того, как были изменены изменения схемы.
  3. Если бы не было никакого обновления к схеме, просто использовать дамп, чтобы загрузить базу данных,

Он сделал занять несколько попыток, чтобы получить права, но вдруг мы решили вопрос нескольких разработчиков находясь на разных схемах , Было так легко импортировать дамп, чтобы обновить схему разработки, чтобы вы могли делать это ежедневно.

+1

Хадсон является удивительным. – stimms

2

Мы делаем. Мы используем продукт под названием Anthill Pro для выполнения всех наших сборок и развертываний. В нем есть процесс документооборота, который настроен для проверки файлов, выполнения сборок, выполнения модульных тестов, а затем развертывания кода на серверах. Вы можете использовать его для развертывания практически всего, поскольку процесс может запускать программы командной строки и т. Д.

1

«make» в UNIX (и Windows) - ваш друг. У этого есть кривая обучения, хотя, но это того стоит. Вы можете обновить источник, скомпилировать, проверить и т. Д.

2

Я не думаю, что для этого есть простой ответ поваренной книги, потому что это очень сильно зависит от вашей среды. Независимо от того, что вы придумали, я настоятельно рекомендую использовать подход, основанный на сценарии, причем сценарии развертывания находятся в самом источнике управления. Эти сценарии также позволят улучшить интеграцию с решениями сборки (см. Ниже).

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

Следующая задача - развертывание базы данных. Решение, которое мне больше всего понравилось для проектов малого и среднего размера, заключается в том, чтобы поддерживать таблицу версий схемы в каждой базе данных и иметь все сценарии обновления DDL и обновлений данных в исходном управлении (включая источники данных, которые они используют в сжатых архивах). Сценарии нумеруются последовательно (начиная с 000001 ..., 000002 ... и т. Д.), А сценарий развертывания, который я запускаю, просто сначала создает резервную копию существующей базы данных, затем получает последний скрипт базы данных запуска из таблицы версий схемы, а затем запускает любые новые сценарии базы данных, найденные в исходном элементе управления в правильном порядке, соответственно обновляя таблицу версий схемы.

Этот подход позволяет мне быстро восстановить базу данных с нуля.

Эти два подхода, вместе взятые, позволяют быстро развернуть базу кода для нескольких различных постановочных машин, среду QA, бета и т.д.


Для только немного более сложных сценариев, вы должны запустите сервер интеграции интеграции, такой как Kieveli et. и др. который по существу «регулярно восстанавливает» все ваше развертывание и, следовательно, содержит сценарии, чтобы сделать то, что вы могли бы запустить «вручную» выше.

Развертывание базы данных также можно сделать более сложным, создав сценарий отката для каждого сценария базы данных. Затем вы должны написать небольшое приложение-контроллер для их обработки. Существует несколько решений OSS для такого рода материалов, и один из них может соответствовать вашим потребностям.

НО, убедитесь, что вы никогда не автоматическое развертывание базы данных в производственной среде ;-)

2

Лучший инструмент для сборки для PHP проекта, вероятно, Phing, который очень похож на муравья, но написана на PHP. Он содержит все необходимые вещи, которые вам нужны для чего-то вроде этого, например, захват вещей из вашего репозитория svn.

0

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

У нас есть все наши завершенные сборки, отмеченные номером изменения, из которого они были построены, на центральном сервере. Когда что-то происходит (мы используем Perforce, но это будет работать для SVN), cronjob в одном из наших блоков сборки замечает, что есть более недавнее изменение, чем сборка, пожары HTTP-запроса для загрузки исходного дерева и начинается строительство (в основном, с GMake). Непрерывный сбор всего лишь нескольких простых шагов:

После этого это короткий шаг к автоматическому запуску всей вашей автоматизации тестирования. Полностью построенный и проверенный (возможно, разворачиваемый!) Код после каждой фиксации.

0

Для языка сценариев обычные советы, такие как использование варианта ant-variant или CruiseControl, не означают многого, потому что вам не нужно ничего компилировать.

Давайте придерживаться базы данных. Три важных момента, когда дело доходит до непрерывной интеграции, - автоматизировать, автоматизировать и автоматизировать. Это означает, что вы должны иметь все, от создания пустой базы данных, импорта из внешних данных и обновления до новой версии, готовой к запуску, с использованием некоторых сценариев. Хорошим примером этого может быть что-то вроде MediaWiki, который позволяет вам настраивать и устанавливать с помощью самого php. Я бы рекомендовал запустить сервер сборки для развертывания новой базы данных в течение дня, запускать модульные тесты и отправлять электронные письма, если какой-либо сбой.

0

Я так думаю, что из этого является то, что вы хотите один скрипт тянуть все вместе, в основном получить все файлы \ ресурсы из системы управления преформой всех шагов, чтобы создать окончательный «продукт»

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

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

http://www.kinook.com/VBP/

http://www.finalbuilder.com/