TeamCity - 在特定文件Mercurial上构建触发器

时间:2010-04-25 11:11:23

标签: mercurial build teamcity triggers tags

我正在尝试让我的构建仅在我在Mercurial中创建Tag时触发。我试图这样做的方法是为我的项目创建一个额外的Build Config(Tag Conf),我将VCS构建触发器设置为:

  

+:/。hgtags(仅在标签更新时触发)

     

- :. (不要触发任何其他文件)

每当我在概述中推送变更集(没有标记)时,我的构建conf(标记配置)显示“X Pending”,我怀疑这是变更集。当我在Mercurial中创建一个Tag时,触发构建i并且X Pending消失。 然后剩下的就是为了我todo是更新AssemblyInfo中的构建/转数(不知何故)并部署工件(不知何故)。

问题1: 这是正确的方法吗?还是有其他/更好的方法来做到这一点? (我使用sln2010 runner + NUnit + Mercurial)

问题2: 有没有办法从Tag中获取Tag名称,以便它可以用于命名工件?例如?

亲切的问候

1 个答案:

答案 0 :(得分:2)

Q1:看起来很好。更加以Mercurial为中心的方法是在TeamCity用户的Mercurial.ini的[hooks]部分放置一个钩子,该部分要么告诉TeamCity要开始构建,要么触及一个单独的文件来启动构建。但是,只要您确定hg update正在运行,那么注意.hgtags也是正常的(推入本身并不会更新.hg回购之外的本地工作副本hg updatehg pull -u)。

Q2。请注意,由于.hgtags文件本身已经过版本化,因此如果您执行hg tag TAGNAME命令,则已将标记TAGNAME应用于tip修订版,但这样做是''我们创建了一个新的变更集,现在是提示,因此标记为TAGNAME的修订版不再是提示。

当您推送所有这些变更集时,我在第一季度提到了相同的考虑因素 - 您对hg update进行了哪些修订?如果您hg update -r tip(最简单的操作和默认操作),您将更新到标记修订版之后的一个修订版。

幸运的是,有一些模板项对于解决这种棘手的情况非常有用:{latesttag}{latesttagdistance}

通过执行以下操作,您可以将构建脚本更新到最新标记:

LATESTTAG=$(hg log --template '{latesttag}')
hg update -r $LATESTTAG

这为未标记的构建提供了一个流行的版本字符串:

VERSION=$(hg log --template '{latesttag}+{latesttagdistance}')

这些命令行的Windows化 - 作为这样残缺的读者的练习而留下的。 :)