我正在尝试与TeamCity进行“持续集成”。我想以增量方式标记我的构建,并且VCS提供的GUID不像简单的增加数字那样有用。我希望这个数字实际上与Mercurial中的修订号相匹配。
我的状况:
Mercurial info:
我希望构建标记为0.0.12而不是GUID。
有人会这么善良并且节省我几个小时试图解决这个问题吗?
答案 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。我们通过以下方式解决了这个问题:
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以获取更多信息!