2008-09-25 4 views
13

Я работаю в компании по разработке продуктов. Сначала мы делаем внутренние выпуски, а затем публичный выпуск. Мне было интересно, как другие компании-разработчики продуктов управляют выпуском? Как вы сообщаете номер выпуска? Отметьте элемент управления источником?Управление выпуском - лучшая практика

ответ

12

Мы используем SubVersion, где теги и ветки дешевы для создания.

Что касается релизов идти, мы будем следовать этому соглашению:

(Major Release) (Minor Release) (Patch-релиз) (версия SVN)

  • патч релиз исправляет = ошибка
  • ...
  • Незначительный выпуск = совместимый с бинарной совместимостью/ совместимый с интерфейсом
  • Основной выпуск = включает разрыв изменений.

Это имеет смысл? Если вам нужна дополнительная информация, добавьте комментарий, и я отредактирую свой пост, чтобы уточнить.

+5

Я не уверен, что я бы назвал Subversion ветви и теги дешевые создать ... по крайней мере, не после использования Git в любом случае. – 2009-10-16 19:59:46

+0

Что сказал Боб - мы собираемся переместить * из * Subversion * в * Git, отчасти потому, что разветвление и пометка в Git гораздо дешевле, чем SVN. http://www.whygitisbetterthanx.com/ - хорошее сравнение нескольких VCS, хотя с очевидным предпочтением Git. – 2011-03-22 17:24:27

1

В моей компании, когда релиз готов, мы создаем ветку для основных/младших номеров релизов, называемую примерно R_2_1. Первоначальный выпуск выполняется путем немедленного создания ветки или метки моментального снимка, называемой R_2_1_0. Когда QA-файлы ошибочно относятся к выпуску, изменения кода производятся на ветке R_X_Y, а затем создается ветка R_2_1_1 для маркировки этой версии. Таким образом, дерево выглядит следующим образом:

Mainline 
| 
|- R_2_1 
| | 
| |-R_2_1_0 (locked) 
| | 
| | 
| |-R_2_1_1 (locked) 
| | 
. . 
. . 
. . 
2

Я работал для пользовательского поставщика программного обеспечения, которое в конечном итоге превратился в поставщика решений, когда клиенты решили, что они не хотят, чтобы реализовать свои собственные callcenters и веб-сайты.

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

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

Не делайте то, что мы сделали - сделайте свой выпуск шкалы!

1

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

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

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

1

Ответ на основе структуры ITIL (более или менее равный другим).

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

Из книг ITIL:

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

Итак, после этого вы должны иметь:

Major: v1, v2, v3, и т.д.
Minor: v1 .1, V2.1 и т. Д.
Аварийная ситуация: v1.1.1, V2.1.1 и т. Д.

2

Как говорили другие, лучший способ справиться с управлением рейсами - это разветвление. Я настоятельно рекомендую взглянуть на Руководство по ветвлению TFS (http://tfsbranchingguideii.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=20785), в котором объясняется несколько подходов к созданию структуры филиала в зависимости от размера ваших проектов и различных способов предоставления вашего программного обеспечения конечным пользователям (основные выпуски, пакеты обновления, исправления). Большинство из них не являются специфичными для TFS, поэтому вы можете применить их к большинству других систем управления версиями.

3

I created a similar question, но я хотел бы добавить к этому: я настоятельно рекомендую использовать что-то вроде Jira для управления циклом выпуска. Вы можете связать коммиты с запросами/проблемами/ошибками, а затем пометить их как часть выпуска.

В частности, , если вы хотите знать, как управлять хорошим циклом выпуска, взгляните на то, как это делает фундамент Apache, потому что у него есть наука. Например, вот roadmap for releases in the Mahout project.

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

Смежные вопросы