我正在尝试让我的构建仅在我在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名称,以便它可以用于命名工件?例如?
亲切的问候
答案 0 :(得分:2)
Q1:看起来很好。更加以Mercurial为中心的方法是在TeamCity用户的Mercurial.ini的[hooks]
部分放置一个钩子,该部分要么告诉TeamCity要开始构建,要么触及一个单独的文件来启动构建。但是,只要您确定hg update
正在运行,那么注意.hgtags也是正常的(推入本身并不会更新.hg
回购之外的本地工作副本hg update
或hg 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化 - 作为这样残缺的读者的练习而留下的。 :)