Лучшая стратегия управления выпусками?

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

Магистраль - это то, что постоянно находится на производственных серверах. В любой момент времени открыты 2 ветки. 1) Техническая версия. Выпускается каждую среду 2) Ветка Sprint. Это выпускается еженедельно (в среду с основной веткой этой недели)

Перед выпуском я объединяю ветки недель в ствол.

Я обнаружил, что при выполнении svn merge обычно возникает масса проблем при слиянии. Таким образом, мы перешли на собрание по слиянию вручную один раз в неделю, которое занимает от 10 минут до 1 часа, где я буквально объединяю 2 каталога в своей системе и спрашиваю каждого разработчика: «Это было ваше изменение? Какую версию этого кода мы должны хранить?"

Эта система определенно НЕ идеальна.

Кто-нибудь может предложить что-нибудь получше?


person llaskin    schedule 06.10.2010    source источник
comment
Хм ... Ну, вы можете использовать git-svn, чтобы помочь с ручным слиянием ...   -  person John Gietzen    schedule 06.10.2010
comment
так ммммм, ты не читал пост? Не могу использовать Git.   -  person llaskin    schedule 06.10.2010
comment
Какую версию SVN вы используете? В последней версии svn (клиент и сервер) есть функция отслеживания слияния. Это не здорово, но некоторые проблемы решает.   -  person David    schedule 06.10.2010
comment
@llaskin: git-svn позволяет использовать git локально при подключении к svn-серверу. Таким образом, вам не нужно менять svn-сервер. Вы просто устанавливаете на клиентах git и git-svn. Кстати, не уверен, что это хорошее решение: это просто еще один слой ...   -  person David    schedule 06.10.2010
comment
@llaskin: это клиентская или серверная версия?   -  person David    schedule 06.10.2010
comment
Ой, подождите, это была клиентская версия. Мы используем JIRA Studio для размещения нашего экземпляра sVN.   -  person llaskin    schedule 06.10.2010


Ответы (4)


Прежде всего, ИЗВИНИТЕ! Я не завидую твоему положению.

Я работал в международном банке, занимаясь редизайном веб-сайта в соответствии с Федеральным законом о картах. Та же ситуация, что и у вас, только в гораздо большем масштабе. У нас было 3 человека, которые ничего не делали, кроме управления релизами, по очень похожему графику. То, что сделало это выполнимым (в некоторые недели я работал с парой сотен файлов за раз), было то, что разработчики объединились в магистраль, а затем магистраль была развернута в производственной среде в качестве копии .... мы не сделали этого. проверка прямо в производство. Итак, с точки зрения выпуска, вы могли бы помогать разработчикам загонщика проверять их работу (какая разница между выполнением «обновления» или ответом «действительно ли это правильная версия?»). Но тогда вы не выбираете вслепую, какую обновления должны быть запущены, что кажется серьезной проблемой. Конечно, разработчики могут немного пожаловаться, но, побывав в таком положении, это действительно не так уж и плохо. И если вы готовы ответить на любые вопросы, которые могут возникнуть, все в порядке. Это сработало для 1200 с лишним разработчиков, которых мы работали в 4 местах по всей стране.

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

person bpeterson76    schedule 06.10.2010
comment
это был не ответ на мой вопрос, а, скорее, хорошее описание того, почему я это делаю. - person llaskin; 06.10.2010

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

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

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

Иерархия веток будет выглядеть следующим образом:

trunk
|-- stable 1.0
  |-- release 1.0
  |-- release 1.1
|-- stable 2.0
  |-- release 2.0

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

person Bernard    schedule 06.10.2010
comment
хорошо, но как они работают одновременно с двумя выпусками из одной ветки? например, спринт и отладочный выпуск одновременно? С разными циклами выпуска в каждой ветке? - person llaskin; 07.10.2010
comment
@llaskin: Это зависит от вашей ситуации. Вы можете создать две отдельные стабильные ветки и создать ветку выпуска для каждой стабильной ветки, когда будете готовы к выпуску. В качестве альтернативы вы можете работать с одной стабильной веткой и создать две релизные ветки на этой стабильной ветке, когда будете готовы к выпуску. Выбор за вами, просто убедитесь, что все стабильные ветки постоянно обновляются, а также ваша магистральная ветка. - person Bernard; 07.10.2010

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

У меня вопрос - для чего вы используете багажник? Это не должно быть то, что находится в производстве, скорее, производство должно запускать версию с тегами (следовательно, выпущенную).

Насколько я понимаю, ваши проблемы слияния вызваны самим собой.

person Otávio Décio    schedule 06.10.2010
comment
позвольте уточнить: производство идет стволом. Производство никогда не меняется напрямую. скорее ствол меняют, а затем отправляют в производство. Сам релиз не помечен - person llaskin; 06.10.2010
comment
Производство ведется по багажнику, это проблема в моей книге. Для меня ствол - это передний край, где собственно и происходит разработка, что не подходит для стабильной производственной среды. Производство должно запускать версию с тегами - опять же, это то, что мы делаем здесь, некоторые могут не согласиться. - person Otávio Décio; 06.10.2010
comment
Да, передний край ствола, также известный как Он здесь не компилируется! Кто это совершил? - person David; 06.10.2010
comment
Итак, здесь Sprint - это передний край, а в служебном выпуске мы исправляем ошибки, обнаруженные в стволе. - person llaskin; 06.10.2010
comment
@ Дэвид - аминь на это. @llaskin - Возможно, я ошибаюсь, но не удивлен. - person Otávio Décio; 06.10.2010
comment
Я думаю, что любая парадигма верна - вы можете либо использовать ствол в качестве производства и разрабатывать по веткам (что хорошо работает, когда может быть несколько параллельных потоков разработки, поэтому мы используем его здесь), либо использовать ствол как передовой и запустить производство. что-то помечено. У обоих есть свои плюсы и минусы, но я не думаю, что любой из них по своей сути неверен ... - person Owen Blacker; 22.03.2011

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

Отложим в сторону стратегию ветвления. Вот несколько предложений по улучшению текущей ситуации.

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

  2. Вы можете придумать какую-то основу

    • Должен уметь определять, какие ветки требуют коммитов, сделанных в стволе.

    • Может быть скрипт перехвата после фиксации, который проверит, находится ли фиксация в стволе, и сразу же выполнит слияние svn с веткой и увидит, есть ли у них конфликт.

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

person Version Control Buddy    schedule 06.10.2010