如何使用修订号而不是GUID(在TeamCity中)标记我的构建?

Tom*_*onk 31 teamcity mercurial

我正在尝试与TeamCity进行"持续集成".我想以增量方式标记我的构建,并且VCS提供的GUID不像简单的增加数字那样有用.我希望这个数字实际上与Mercurial中的修订号相匹配.

我的情况:

替代文字

Mercurial信息:

替代文字

我希望构建标记为0.0.12而不是GUID.

有人会这么善良并节省我数小时试图解决这个问题吗?

Ry4*_*ase 46

正如Lasse V. Karlsen所提到的那些数字修订号是特定于本地克隆的,并且对于每个克隆可以是不同的.它们真的不适合版本控制 - 您可以重新记录相同的回购并获得不同的版本号.

至少包括节点id也创建了类似的东西,0.0.12-6ec760554f2b你仍然可以获得可排序的发布工件,但仍然坚定地确定你的发布.

如果您使用数字标签标记版本,那么有一个特别好的选择:

% hg log -r tip --template '{latesttag}.{latesttagdistance}'
Run Code Online (Sandbox Code Playgroud)

哪个,如果该克隆上的最新标签被调用1.0.1并且84提交前提供了如下值:

1.0.1.84
Run Code Online (Sandbox Code Playgroud)

由于您可以在不同的存储库中拥有与提交的84个提交不同的头,因此您应该仍然可以包含节点ID,如:

% hg log -r tip --template '{latesttag}.{latesttagdistance}-{node|short}'
Run Code Online (Sandbox Code Playgroud)

赠送:

1.0.1.84-ec760554f2b
Run Code Online (Sandbox Code Playgroud)

这是一个伟大的版本字符串.

  • 你是如何获得TeamCity的信息的?我仍然没有看到将这些信息添加到系统属性中的方法,因此可以用它来命名诸如工件之类的东西. (2认同)
  • Downvoted,因为它与TeamCity没有任何关系. (2认同)
  • 这实际上没有回答这个问题,因为它与Teamcity无关 (2认同)

Vas*_*iak 13

查看转速的最佳和最简单的方法.TeamCity内部版本号中的数字是使用与TeamCity的Build Script Interaction.也就是说,它有可能设置内部版本号.

因此,使用以下Command Executable向项目添加一个新的第一个构建步骤命令行

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

您将获得Mercurial修订版号作为每个版本的标签.

当然,您可以将引号中的命令更改为您想要的任何内容.

我相信我的答案比接受的答案更正确.

编辑:

您也可以通过MSBuild任务而不是Command Executable执行相同的操作.有一个包含以下代码的MSBuild项目文件,设置TeamCity作为第一步运行它,它将改变其全局变量buildNumber:

<Message Text="##teamcity[buildNumber '$(CurrentVersion)']" Importance="High" />
Run Code Online (Sandbox Code Playgroud)

CurrentVersion包含完整版本的字符串在哪里(例如"1.0.56.20931").


Chr*_*gan 6

hg id生成hash(6ec760554f2b),hg id -n生成本地修订号(12).

(注意这是一个纯粹来自hg方面的答案,你如何将其纳入TeamCity,我不知道,因为我从未使用它.)


sab*_*ito 5

我设法使用解决方法在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}" />
Run Code Online (Sandbox Code Playgroud)

如果您看到MSBuild任务"TeamCitySetBuildNumber",我正在使用"{build.number}"变量,因为它将此替换为您最初在构建号中设置的内容.我在原始设置中使用%build.vcs.number%(在Web UI中),结果就是Ry4an在上面写的内容!

希望这对你有用!