Как я могу пометить свою сборку номером ревизии, а не GUID (в TeamCity)?
Я пытаюсь сделать "непрерывную интеграцию" с TeamCity. Я хотел бы пометить мои сборки инкрементным образом, а GUID, предоставленный VCS, не так полезен, как простое увеличение числа. Я хотел бы, чтобы число действительно соответствовало ревизии в номере Mercurial.
Мое положение вещей:
![alt text]()
Меркуриальная информация:
![alt text]()
Я хотел бы, чтобы сборка была помечена как 0.0.12, а не GUID.
Будет ли кто-то таким добрым и спаси мне часы, пытаясь понять это?
Ответы
Ответ 1
Как отметил Лассе В. Карлсен, численные номера ревизий являются локально-клоновными и могут быть разными для каждого клона. Они действительно не подходят для управления версиями - вы можете отменить одно и то же репо и получить разные номера версий.
По крайней мере, включите id node, также создав что-то вроде 0.0.12-6ec760554f2b
, тогда вы все равно получите сортируемые артефакты выпуска, но все еще решительно идентифицируете ваш выпуск.
Если вы используете числовые теги для выпуска тегов, особенно приятный вариант:
% hg log -r tip --template '{latesttag}.{latesttagdistance}'
который, если последний тег на этом клоне был вызван 1.0.1
и был 84
завершен, дает значение, подобное:
1.0.1.84
Так как у вас могут быть разные головы, которые 84 коммитатся от тега в разных репозиториях, вам все равно, вероятно, следует добавить идентификатор node, например:
% hg log -r tip --template '{latesttag}.{latesttagdistance}-{node|short}'
даяние:
1.0.1.84-ec760554f2b
который делает строку большой.
Ответ 2
Самый лучший и простой способ увидеть rev. номер в номере сборки TeamCity должен использовать Build Script Взаимодействие с TeamCity. А именно, он имеет возможность установить номер сборки.
Итак, добавьте в свой проект новый очень первый шаг построения командной строки со следующей исполняемой командой
for /f %%i in ('c:\tortoisehg\hg id -n') do echo ##teamcity[buildNumber '%%i']
И вы получите номер версии Mercurial в качестве метки для каждой сборки.
Конечно, вы можете изменить команду в кавычках на все, что пожелаете.
Я считаю, что мой ответ более правильный, чем принятый.
EDIT:
Также вы можете сделать то же самое с помощью задачи MSBuild, а не с помощью команды Executable. Создайте файл проекта MSBuild со следующим кодом, установите TeamCity, чтобы запустить его как первый шаг, и он изменит свою глобальную переменную buildNumber
:
<Message Text="##teamcity[buildNumber '$(CurrentVersion)']" Importance="High" />
Где CurrentVersion
- строка, содержащая полную версию (например, "1.0.56.20931" ).
Ответ 3
hg id
создает хеш (6ec760554f2b
), hg id -n
производит номер локальной версии (12
).
(Обратите внимание, что это ответ исключительно со стороны hg, как вы тогда получаете это в TeamCity, я не знаю, поскольку я никогда не использовал его.)
Ответ 4
Мне удалось использовать его в 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 выше!
Надеюсь, что это сработает для вас!
Ответ 5
Когда я использовал Subversion, я использовал что-то подобное в TeamCity. Формат был:
{Major}.{Minor}.{TeamCity Build No.}.{Subversion Revision No.}
Это позволило мне посмотреть на сборку и посмотреть, какая ее сборка появилась на TeamCity и номер версии из подрывной деятельности.
Теперь я перешел на Git, который поставил меня в ту же ситуацию, что и вы. После игры с различными идеями я пришел к выводу, что мне действительно не нужна ревизия, сборка достаточно хороша. Поскольку TeamCity является таким мощным инструментом, все, что вам нужно, это номер сборки, учитывая номер сборки, вы можете посмотреть историю сборки и определить ее версию.
{Major}.{Minor}.{Macro}.{TeamCity Build No.}
Кроме того, вы можете получить TeamCity для маркировки вашего репозитория с номером сборки, позволяющим вам искать заданную сборку в вашем исходном элементе управления.
Ответ 6
При предоставлении номера сборки с номером меркурийной ревизии вы должны знать, что эти числа являются клонированными и могут отличаться от клона к клону.
В нашем проекте у нас была такая же проблема. Мы используем TeamCity 7.1.1. Мы решили это следующим образом:
- Добавьте в свою конфигурацию шаг построения командной строки.
- Сначала выполните этот шаг сборки.
- В свойствах шага сборки выберите "Выполнить:" Исполняемые с параметрами "
- Добавьте следующий текст в исполняемый файл команды:
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%
Прочтите этот, чтобы получить дополнительную информацию!