Как я могу пометить мою сборку номером ревизии, а не GUID (в TeamCity)? - PullRequest
31 голосов
/ 06 декабря 2010

Я пытаюсь сделать «непрерывную интеграцию» с TeamCity.Я хотел бы маркировать свои сборки постепенно, и GUID, предоставляемый VCS, не так полезен, как простое возрастающее число.Я хотел бы, чтобы число действительно совпадало с ревизией числа в Mercurial.

Мое положение дел:

alt text

Информация о Mercurial:

alt text

Мне бы хотелось, чтобы сборка была помечена 0.0.12, а не GUID.

Неужели кто-то будет так любезен и сэкономит мне часы попыток выяснить это?

Ответы [ 6 ]

46 голосов
/ 06 декабря 2010

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

По крайней мере, включить идентификатор узла, создающего что-то вроде 0.0.12-6ec760554f2b, тогда вы по-прежнему получаете сортируемые артефакты выпускано все еще точно идентифицируют ваш выпуск.

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

% hg log -r tip --template '{latesttag}.{latesttagdistance}'

, который, если самый последний тег этого клона былс именем 1.0.1 и 84 коммитов назад дает значение, подобное:

1.0.1.84

Поскольку у вас могут быть разные головы, которые находятся на расстоянии 84 коммитов от тега в разных репозиториях, вы все равно, вероятно, должны включить идентификатор узланапример:

% hg log -r tip --template '{latesttag}.{latesttagdistance}-{node|short}'

, что дает:

1.0.1.84-ec760554f2b

, что составляет великую строку версии.

13 голосов
/ 15 сентября 2011

Лучший и самый простой способ увидеть рев. номер в номере сборки TeamCity - Взаимодействие сценариев сборки с TeamCity . А именно, он имеет возможность установить номер сборки .

Итак, добавьте в свой проект новый самый первый шаг командной строки Командная строка со следующей исполняемой командой

for /f %%i in ('c:\tortoisehg\hg id -n') do echo ##teamcity[buildNumber '%%i']

И вы получите номер ревизии Mercurial в качестве метки для каждой вашей сборки.

Конечно, вы можете изменить команду в кавычках на что угодно.

Я полагаю, что мой ответ более верен, чем принятый.

EDIT:

Также вы можете сделать то же самое с помощью задачи MSBuild, а не Command Executable. Подготовьте файл проекта MSBuild со следующим кодом, настройте TeamCity для его запуска в качестве первого шага, и он изменит свою глобальную переменную buildNumber:

<Message Text="##teamcity[buildNumber '$(CurrentVersion)']" Importance="High" />

Где CurrentVersion - строка, содержащая полную версию (например, "1.0.56.20931").

6 голосов
/ 06 декабря 2010

hg id создает хеш (6ec760554f2b), hg id -n создает локальный номер ревизии (12).

(Обратите внимание, что это ответ только со стороны hg, как вы тогдазаполучить это в TeamCity, я не знаю, так как никогда не использовал его.)

5 голосов
/ 25 августа 2011

Мне удалось использовать его в Teamcity с помощью обходного пути:

    <Exec Command="hg log -r tip --template {latesttag}.{latesttagdistance} > $(BuildAgentTempDir)\version.txt"/>
    <ReadLinesFromFile File="$(BuildAgentTempDir)\version.txt">
        <Output TaskParameter="Lines" ItemName="versionInfo"/>
    </ReadLinesFromFile>
    <TeamCitySetBuildNumber BuildNumber="@(versionInfo)-{build.number}" />

Если вы видите задачу MSBuild "TeamCitySetBuildNumber", я использую переменную "{build.number}", поскольку она заменяет ее начто вы установили в номере сборки изначально.Я использовал% build.vcs.number% в своих первоначальных настройках (в веб-интерфейсе), и в результате получилось то, что написал Ry4an выше!

Надеюсь, это работает для вас!

3 голосов
/ 06 декабря 2010

Когда я использовал Subversion, я делал что-то подобное в TeamCity. Формат был:

{Major}.{Minor}.{TeamCity Build No.}.{Subversion Revision No.}

Это позволило мне взглянуть на сборку и посмотреть, из какой сборки она поступила в TeamCity, и номер ревизии из subversion.

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

{Major}.{Minor}.{Macro}.{TeamCity Build No.}

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

2 голосов
/ 23 мая 2013

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

В нашем проекте мы столкнулись с той же проблемой.Мы используем TeamCity 7.1.1.Мы решили это следующим образом:

  1. Добавить шаг сборки командной строки в свою конфигурацию.
  2. Сначала запустите этот шаг сборки.
  3. В свойствах шага сборкивыберите «Выполнить:« Исполняемый файл с параметрами »»
  4. Добавьте следующий текст в исполняемый файл команды:

for /f %%i in ('hg id -n') do echo ##teamcity[buildNumber '%%i']

 Save changes.

Вы также можете использовать ранеесгенерированный номер сборки при выполнении шага 3.

Пример:

for /f %%i in ('hg id -n') do echo ##teamcity[buildNumber '%system.build.number%.%%i']

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

Прочтите это , чтобы получить больше информации!

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

Пример:

%dep.bt82.build.number%

Читать это , чтобы получить больше информации!

...