Как реализовать «пошаговую сборку» для проекта LAMP? - PullRequest
9 голосов
/ 15 июня 2009

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

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

Мне любопытно посмотреть

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

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

Ответы [ 8 ]

7 голосов
/ 15 июня 2009

Мы использовали муравей с Хадсон . Работал как шарм.

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

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

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

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

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

2 голосов
/ 15 июня 2009

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

2 голосов
/ 15 июня 2009

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

Самый простой такой скрипт для запуска в вашей производственной среде - это просто команда получить последнюю версию (или получить конкретную версию) из системы контроля версий.

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

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

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


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

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

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

2 голосов
/ 15 июня 2009

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

1 голос
/ 15 июня 2009

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

0 голосов
/ 15 июня 2009

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

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

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

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

http://www.finalbuilder.com/

0 голосов
/ 15 июня 2009

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

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

0 голосов
/ 15 июня 2009

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

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

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

...