【问题标题】:TeamCity - Build triggering on specific file, MercurialTeamCity - 在特定文件上构建触发,Mercurial
【发布时间】:2012-02-08 06:04:51
【问题描述】:

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

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

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

每当我在概览中推送一个变更集(没有标签)时,我的构建配置(Tag Conf)都会显示“X Pending”,我怀疑这是变更集。当我在 Mercurial 中创建标签时,会触发构建 i 并且 X Pending 消失。 然后我要做的就是更新 AssemblyInfo 中的构建/版本号(以某种方式)并部署工件(以某种方式)。

问题 1: 这是执行此操作的正确方法还是有另一种/更好的方法来执行此操作? (我使用 sln2010 runner + NUnit + Mercurial)

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

亲切的问候

【问题讨论】:

    标签: mercurial build teamcity triggers tags


    【解决方案1】:

    Q1:看起来不错。一种更以 Mercurial 为中心的方法是在 TeamCity 用户的 Mercurial.ini 的 [hooks] 部分中放置一个钩子,它要么告诉 TeamCity 开始构建,要么触及启动构建的单独文件。但是,监视 .hgtags 也很好,只要您确定 hg update 正在运行(推入本身不会在没有 hg update 的情况下更新 .hg 仓库之外的本地工作副本或hg pull -u)。

    第二季度。请记住,由于.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 化留给如此残缺的读者作为练习。 :)

    【讨论】:

    • 嗨,我对 hg 很陌生,但模板项目听起来很有趣。我马上去挖。但是您是否知道是否有用于获取标签名称的模板,例如获取 hg 标签“MyTagRC1”中的“MyTagRC1”?
    • 这就是我上面展示的 {latesttag} 的作用。它获取最新标签的名称。
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 2011-06-10
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多