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

时间:2010-12-06 05:33:33

标签: mercurial teamcity

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

我的状况:

alt text

Mercurial info:

alt text

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

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

6 个答案:

答案 0 :(得分:46)

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

至少包括节点ID也会创建类似0.0.12-6ec760554f2b的内容,然后您仍然可以获得可排序的发布工件,但仍然可以确定您的发布。

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

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

,如果该克隆上的最新标记被称为1.0.1并且84提交之前提供的值如下:

1.0.1.84

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

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

,并提供:

1.0.1.84-ec760554f2b

生成精彩版本字符串。

答案 1 :(得分:13)

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

因此,在项目中添加一个新的第一个构建步骤命令行,其中包含以下命令可执行文件

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

您将获得Mercurial版本号作为每个版本的标签。

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

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

修改

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

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

其中CurrentVersion是包含完整版本的字符串(例如“1.0.56.20931”)。

答案 2 :(得分:6)

hg id生成哈希(6ec760554f2b),hg id -n生成本地修订号(12)。

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

答案 3 :(得分: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}" />

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

希望它适合你!

答案 4 :(得分:3)

当我以前使用Subversion时,我曾经在TeamCity中做过类似的事情。格式为:

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

这使我能够查看一个程序集,看看它来自TeamCity的构建版本以及来自subversion的版本号。

我现在已经转移到Git,这让我和你一样。在玩了各种各样的想法后,我得出的结论是,我实际上并不需要修改,构建就足够了。因为TeamCity是一个非常强大的工具,所以您只需要构建号,给定构建号,您可以查看构建历史记录并从中确定修订版。

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

此外,您可以让TeamCity使用内部版本号标记您的存储库,以便您在源代码管理中查找给定的内部版本。

答案 5 :(得分:2)

在为您的内部版本号提供数字mercurial修订版时,您必须知道,这些数字是特定于克隆的,并且可能因克隆而异。

在我们的项目中,我们遇到了同样的问题。我们正在使用TeamCity 7.1.1。我们通过以下方式解决了这个问题:

  1. 将命令行构建步骤添加到您的配置中。
  2. 首先运行此构建步骤。
  3. 在构建步骤属性中,选择“运行:'带参数的可执行文件'”
  4. 将以下文本添加到Command Executable:
  5. 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']
    

    您可以使用它来使构建计数器出现在您的内部版本号中。

    阅读this以获取更多信息!

    请记住,teamcity在构建开始之前编译配置构建号 ,只有在构建步骤完成其工作后才会出现正确的构建号。 这就是为什么,在某些情况下(将你的mercurial修订版插入工件的名称)你应该在前面的配置中定义内部版本号的值并引用它。

    示例:

    %dep.bt82.build.number%
    

    阅读this以获取更多信息!