Подтвердить что ты не робот

Как я могу пометить свою сборку номером ревизии, а не GUID (в TeamCity)?

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

Мое положение вещей:

alt text

Меркуриальная информация:

alt text

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

Будет ли кто-то таким добрым и спаси мне часы, пытаясь понять это?

4b9b3361

Ответ 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%

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