Ветви параллельной разработки, репозитории Build Artifact и выпуски QA - PullRequest
6 голосов
/ 13 декабря 2011

Как параллельная разработка / ветвление в вашей VCS влияет на настройку вашего репозитория артефактов сборки и выпуски в QA?

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

Для нумерации версий я хотел бы разместить идентификатор ветви, чтобы показать QA, из какой ветви пришла сборка.Любая сборка из ствола будет иметь «нормальный» номер версии без идентификатора ветки:

trunk: 1.1.0
branch: 1.1.0.MyBranch
branch: 1.1.0.AnotherBranch

Первоначально я думал, что в каждой ветке должен быть один репозиторий артефактов сборки и один основной репозиторий для ствола.

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

Есть ли способ обойти это, чтобы только освободить от ствола?

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

Моя текущая идея состоит в том, чтобы убедить руководство назначить команду разработчиков для порядка выпуска (скажем, через неделю после выпуска) и объединить их ветку с внешней линией.Затем QA начинает получать сборки ствола вместо сборок веток, и команда разработчиков, чья ветвь была объединена, исправляет любые ошибки непосредственно в стволе, а не в ветке.

* ОБНОВЛЕНИЕ *

В частности, я использую SVN для VCS и Artifactory для своего хранилища.Я использую Ivy для управления зависимостями.

Просмотр справки Artifactory по макетам репозитория ( Макеты репозитория ):

"a sequence of literals that identifies the base revision part of the artifact 
 version, excluding any integration information"
"'1.5.10', or in case of an integration revision '1.2-SNAPSHOT' the base revision
  is '1.2'"

Это и макеты по умолчанию для Maven и Ivy показывают, что это большеcommon:

MyRepo
 MyLib
  1.1.0 (this is the dll from trunk)
   -MyLib.dll
  1.1.0.MyBranch-SNAPSHOT (dev builds from the "MyBranch" branch)
   -MyLib.dll
  1.1.0.AnotherBranch-SNAPSHOT (dev builds from the "AnotherBranch" branch)
   -MyLib.dll

Это типичная схема репо для использования Ivy?Я хотел бы предположить, что это потребует использования функции ветвления Айви для разрешения зависимостей во время сборки в правильную папку филиала в хранилище?

* ОБНОВЛЕНИЕ 2 *

Вот моя текущая структура Артефактуры:

MySnapshotRepo
 CompanyName
  CompanyName.MyLib
   1.0-SNAPSHOT
    MyLib.dll (snapshot builds from the dev branch)
MyReleaseRepo
 CompanyName
  CompanyName.MyLib
   1.0.0
    MyLib.dll (release builds from the trunk)
   1.0.1
    MyLib.dll (release builds from the trunk)
   1.0.2
    MyLib.dll (release builds from the trunk)
  1. Как указать Ivy на конкретный репово время сборки?Для релиза мне нужно только вытащить двоичные файлы из репозитория релиза.Для сборки снимка я могу вытащить двоичные файлы, если они появляются в репозитории моментальных снимков, если они отсутствуют, я могу вытащить их из репозитория релизов.Я понимаю, как связывать репозитории, я просто не понимаю, как их переключать.

В моем файле IvySettings.xml у меня есть:

<settings defaultResolver="defaultresolvechain"/>

.. но я не хочу значения по умолчанию.Я хотел бы указать, к какой цепочке распознавателей разрешать, когда я вызываю команду Ivy resol.Примерно так:

<ivy:resolve transitive="false" resolveMode="snapshot-resolve" conf="compile,test"/>

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

Задача публикации имеет атрибут «resolver», который отлично работает для меня аналогичным образом.

Кроме того, в моем конкретном примере у меня может быть несколько веток SVN, соответствующих нескольким репозиториям моментальных снимков Artifactory.,Могу ли я параметризировать способ, которым я решаю, к каким репо?Или более правильный способ размещения моментальных снимков из всех веток в одном репо и использование функции ветки Ivy?

Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация для помощи.

1 Ответ

1 голос
/ 22 ноября 2014

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

Таким образом, QA получает сборки из транка и веток релиза стабильности.Вы можете упростить дальнейшее упрощение, имея только один выпуск за раз и всегда проводите тестирование только из магистрали и ветви или тега только во время фактического выпуска.Это было бы возможно, если бы не было разработки, идущей на транк, но все на ветви функций.

Иногда вам понадобится передать сборку разработки в QA.Обычно перед тем, как объединить ветвь функции с транком, просто чтобы убедиться, что вы ничего не сломали.В этом случае вы можете пометить предварительное слияние, объединить ветвь объекта и транк и выполнить сборку QA из транка, и, если возникнут серьезные проблемы, вы можете вернуться к метке.Это предотвратит слияние из другой ветви функций, пока это происходит, но если слияния до транка происходят нечасто, это может сработать.

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

...