Создание версии сборки TeamCity Version.NET

Сейчас наши сборки имеют номер версии, такой как 2.0.831.0. Насколько я понимаю, это основная версия, младшая версия, дата и номер сборки. Если я вношу изменения и строю в тот же день, то 2.0.831.1, 2.0.831.2 и т.д.

Формат номера сборки TeamCity - это просто 2. {0}, где {0} - это число с автоматическим добавлением, которое продолжается вечно (2.195, 2.196 и т.д.).

Как заставить TeamCity выглядеть точно так же, как версия сборки? Мы хотим иметь возможность связать журнал изменений с версией сборки, чтобы каждый мог сказать, что версия сборки 2.0.831.2 имела эти изменения в этих файлах.

Дополнительная информация: На этапе сборки используется опция "Visual Studio (sln)" вместо "MSBuild", если это имеет значение. Если это имеет значение, мы используем Subversion для управления версиями. Наша версия TeamCity - 6.5.1 (сборка 17834).

Ответы

Ответ 1

Я бы рекомендовал вам принять семантическую схему управления версиями {major}.{minor}.{patch} и добавить 4-й элемент для номера сборки {major}.{minor}.{patch}.{build}. Это более полезно, если включить дату сборки в схему управления версиями.

TeamCity 6.5 (вы не указали версию) имеет функцию сборки, которая может быть использована для исправления версии в AssemblyInfo.cs во время сборки. См. Документацию для AssemblyInfo Patcher.

AssemblyInfo patcher dialog (TeamCity documentation)

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

Ответ 2

Одним из решений является использование бегуна MSBuild и запись MSBuild script, который считывает информацию о версии из файла AssemblyInfo, устанавливает версию сборки TeamCity на это значение во время выполнения сборки, а затем увеличивает часть номера сборки этого версии и записывает значение обратно в AssemblyInfo.

Это не особенно тривиально, так как вам нужно понимать, как писать пользовательские сценарии MSBuild, и вам, вероятно, потребуется использовать некоторые из задач сообщества и т.д., чтобы читать/записывать информацию о версии.

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

Здесь есть отличная статья в которой описывается выполнение общих задач CI с помощью MSBuild. Он использует CruiseControl.NET, но многое из этого по-прежнему применяется. Если вы используете TeamCity 6.5, я бы рассмотрел использование его функций сборки исключительно, так как это будет намного проще в обслуживании, чем пользовательский MSBuild script.