Рекомендации по управлению строительством/непрерывной интеграции

Как ваша команда обрабатывает сборки?
Мы используем Cruise Control, но (из-за недостатка знаний) мы сталкиваемся с некоторыми проблемами - Модификация кода в SVN - Управление построением
В частности, как вы делаете доступным конкретную версию, когда код постоянно проверяется?

Как правило, вы можете обсудить, какие рекомендации вы используете в управлении выпуском?

Ответ 1

Я удивлен, что это не дубликат, но я не могу найти другого.

Хорошо, вот сделка. Это два отдельных, но связанных с ними вопроса.

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

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

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

Возможно, вы захотите прочитать одну из книг "Прагматическая версия контроля", и, конечно же, материал о CI и Cruise Control на сайте Мартина Фаулера имеет важное значение.

Ответ 2

Посмотрите непрерывную интеграцию: лучшие оценки от Мартина Фаулера.

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

[Отредактировано]

Мы используем Cruise Control в качестве инструмента интеграции. Мы просто имеем дело с багажником, который является основным хранилищем Subversion в нашем случае. Мы редко вытаскиваем новую ветку для создания новых карточек с рассказами, когда есть вероятность сложных конфликтов. Обычно мы вытаскиваем ветку для выпуска версии и создаем сборку из этого и доставляем ее нашей тестовой команде. Тем временем мы продолжаем работу в багажнике и ожидаем отзывов от тестовой команды. После тестирования мы создаем тег из ветки, который в нашем случае является логически неизменным. Таким образом, мы можем выпускать любую версию в любое время любому клиенту на случай. В случае ошибок в выпуске мы не создаем тег, мы фиксируем там вещи в ветке. Получив все исправленные и одобренные тестовой группой, мы объединим изменения обратно в магистраль и создаем новый тег из ветки, специфичной для этой версии.

Итак, идея состоит в том, что наши ветки и теги не участвуют в непрерывной интеграции напрямую. Слияние кода ветвления обратно в магистраль автоматически делает этот код частью CI (непрерывная интеграция). Мы, как правило, делаем только исправления, для конкретной версии, в ветких, поэтому, по-моему, они действительно не участвуют в процессе CI. Напротив, если мы начнем делать новые карточные карты, по некоторым причинам, в ветке, то мы не будем слишком долго отделять эту ветку. Мы стараемся как можно скорее объединить его обратно в багажник.

Именно,

  • Мы создаем ветки вручную, когда планируем следующую версию
  • Мы создаем ветвь для выпуска и исправляем ошибки в этой ветке в случае
  • После получения всего хорошего мы создаем тег из этой ветки, который является логически неизменным
  • Наконец, мы объединим ветку обратно в магистраль, если есть некоторые исправления/модификации

Ответ 3

Управление релизами выходит за рамки непрерывной интеграции.

В вашем случае вы должны использовать Cruise Control для автоматического создания тега, который позволяет разработчикам продолжать кодирование, в то время как ваша инкрементная сборка может иметь место.

Если ваша сборка инкрементальна, это означает, что вы можете запускать ее каждые x минут (а не для каждой фиксации, потому что, если они слишком часты, и если ваша сборка слишком длинная, возможно, у нее не будет времени до следующего сборка пытается состояться). "X" должен быть настроен так, чтобы быть длиннее, чем цикл компиляции / unit test.

Непрерывное интегрирование должно включать автоматический запуск модульных тестов.

Кроме того, полный процесс управления релизами будет включать:

  • серия развертывания на серверах омологации
  • полный цикл омологации /UAT (тест приемки пользователей)
  • тесты без регрессии
  • тесты производительности/стресса
  • предварительные (и параллельные тесты)

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

Снова "управление выпуском" намного сложнее, чем просто "непрерывная интеграция";)

Ответ 4

Короче говоря: создайте ветку, скопированную из туловища, и проверите/создайте свою версию на этой ветке на сервере сборки.

Однако, чтобы добраться до этого момента полностью автоматизированным способом с помощью cc.net, это непростая задача. Я мог бы подробно рассказать о нашем процессе сборки, но, возможно, это слишком тонко для обсуждения.

Я согласен с Чарли в том, что у меня есть автоматическая, повторяемая сборка с нуля. Но мы не делаем все для сборки "Непрерывный", только для выпусков выпусков Nightly, Beta, Weekly или Omega (GA/RTM/Gold). Просто потому, что некоторые вещи, такие как генерация документации, могут занять много времени, и для непрерывной сборки вы хотите предоставить разработчику быструю обратную связь по результату сборки.

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

Ответ 5

Вы можете использовать Team Foundation Server 2008 и Microsoft Studio Team System для выполнения вашего контроля, ветвления и выпусков исходного кода.