Как синхронизировать активность CI (Hudson) в существующем автоматизированном процессе сборки (phing, svn)? - PullRequest
2 голосов
/ 16 апреля 2010

НАШ ТЕКУЩИЙ ПРОЦЕСС СТРОИТЕЛЬСТВА

Мы небольшая команда разработчиков (от 2 до 4 человек в зависимости от проекта), которые в настоящее время используют Phing для развертывания кода в промежуточной среде, прежде чем начать работу. Мы храним наш код в репозитории SVN, где транк хранит текущую активную разработку, и в определенное время мы делаем ветки, которые мы тестируем, а затем (в случае успеха) тегируем и экспортируем в промежуточную среду. Если и там все пойдет хорошо, мы наконец развернем их на производственных серверах. Действия высоко автоматизированы, но всегда инициируются вмешательством человека.


СОМНЕНИЕ

Теперь мы хотели бы ввести непрерывную интеграцию (с Хадсоном) в процесс; К сожалению, у нас есть некоторые сомнения по поводу синхронизации действий, так как мы боимся, что CI может помешать нашему процессу сборки и вызвать определенные проблемы.

Учитывая, что автоматизированный цикл CI имеет определенную частоту автоматически выполняемых действий, мы видим 2 возможных варианта «интеграции», каждый со своими проблемами:

  1. Случай A: каждый цикл CI производит новый ветка со своим именем; мы используем такое имя, чтобы вручную (через звонить, как это происходит сейчас) экспортировать код из SVN в постановку окр. Проблема, которую я вижу здесь в том, что (если не приняты конкретные контрмеры принято - т.е. удаление) количество веток у нас иметь легко может выйти из-под контроля (давайте Предположим, мы часто совершаем, чтобы мы есть новая новая сборка / ветвь каждый N минут).

  2. Случай B: каждый цикл CI создает новый ветвь с именем 'текущая', которая затем помечается уникальное имя только тогда, когда мы вручную решите экспортировать его в постановку; текущая ветка, в любом случае то удален, как только следующий CI цикл начинается. Проблема, которую мы видим вот что новый цикл мог пнуть в то время как кто-то пометка / экспорт «текущего» переход к постановке, таким образом, создавая противоречивая сборка (но может быть здесь Я просто слишком пессимист, так как я Признаюсь, я не знаю, является ли SVN предлагает некоторую встроенную защиту против этого).


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

Есть ли что-то важное, что мы просто полностью остановили в общей картине? Спасибо за ваше внимание и (заранее) за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 01 июня 2010

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

Циклы CI запускаются изменениями в коде, чтобы гарантировать, что интеграция этих изменений не нарушит работу приложения. Поэтому вы бы предпочли настроить проект в Hudson для каждого активного потока разработки, это один для основной линии, один для ветви, представляющей рабочую версию (для исправления ошибок), и в конечном итоге один для RC. 1005 *

Статья Мартина Фаулера о непрерывной интеграции - превосходное руководство по поводу того, почему и как можно реализовать CI.

2 голосов
/ 16 апреля 2010

Подход, который мы использовали в нашем проекте, состоял в том, чтобы запускать сборки CI только при изменении кода. Это может быть настроено на вашем SVN как хук после фиксации. Затем вы можете удаленно запускать сборки в HUDSON через аутентифицированный URL. Однако проблема, которую я вижу, заключается в том, что, поскольку необходимо создавать задания, если ваша сборочная система не поддерживает их, у Хадсона нет возможности выяснить, есть ли новая ветвь в репозитории и создать для этого задание.

...