2012-10-11 60 views
4

我有TeamCity跨多个Mercurial分支构建配置。作为构建过程的一部分,我想根据正在构建的分支命名一些输出。如何将分支名称传递给TeamCity中的MSBuild脚本?

我试过使用$(TEAMCITY_BUILD_BRANCH),试图从TeamCity中获取teamcity.build.branch属性,但我只收到一个空字符串。我成功使用$(BUILD_NUMBER)来获取build.number属性到脚本,所以我有点困惑什么是必需的。

回答

4

只需创建一个构建参数:

system.branch_name = %teamcity.build.vcs.branch.Your_Project% 

任何非字母数字字符在项目名称中应该用“_”代替。 在你的msbuild中使用$(branch_name)来引用参数。

工程就像魅力:-)

+0

试过了 - 它得到了\ refs \ head \ whatever,其中'whatever'是一个实际的分支名称 – chester89

+0

@ chester89你可以使用括号来指定名字submatch:例如'refs/head /(master)','refs/head/release /(*)'或'refs/head /(feature/*)'...分别获得“master”,“1.2.3”和“feature/some-name”。 – gregmac

+0

虽然在分支名称周围使用括号只会使分支名称(不带“refs/head /”)出现在TeamCity UI中,但%teamcity.build.vcs.branch.Your_Project%参数仍然会被解析为一个值,该值包含裁判/头。我在TeamCity的8.0.6版本。 –

2

$(vcsroot_url)如果您只有一个vcs根连接到生成配置。

如果这不是你想要的 - 试图让与这里所描述的所有已知属性: http://confluence.jetbrains.net/display/TCD7/Predefined+Build+Parameters

仅参考服务器属性:

,您就能获得全套参考 - 中通过将 system.teamcity.debug.dump.parameters属性添加到版本 配置并检查构建日志中的“仅供参考的服务器 属性”部分。

UPD:你也可以检查这个"what's new" link

VCS分支参数对于Git和水银,TeamCity的提供在 瞬间打造的知名开始VCS分支的名称 额外构建参数。如果构建版本从 refs/heads/bugfix分支进行修订,TeamCity将添加配置参数 ,其名称为:teamcity.build.vcs.branch。 <简化VCS 根名称> =参/头/错误修正

在哪里是所有 非字母数字字符与_取代VCS根目录的名称。

根据这个 - 你应该能够访问分支如下的MSBuild变量 $(teamcity_build_vcs_branch_)。

希望这次我正确理解你的问题。 PS:对不起,最初的误导 - 我不知道TeamCity中DVCS和CVCS之间的细微差别。反正 - 我最初的回答也可以帮助你 - 你可以得到所有的变量,然后找到正确的数据确切的变数名称你想

+0

@Alexy我使用的是Mercurial,所以分支名称不是URL,而是存储库中的名称。我不太明白在MSBuild脚本中引用给定的构建参数需要什么。 –

+0

如果使用TeamCity构建它 - 它会将一些自己的环境变量发送到msbuild上下文,并且可以像访问之前定义的属性一样访问它。这与TeamCity的BUILD.NUMBER成为$(BUILD_NUMBER)可用于您的msbuild脚本的方式相同。团队城市通常会发布许多有用的信息 - 您可以查看文档以获取完整的详细信息。只要你问及访问分支名称 - 我认为你可以从vcs url中提取它。不幸的是 - 我没有Mercity作为VCS的Teamcity,只有svn在这里。我发现了一些更多的澄清,并将其附加到我的回答 –

+0

我已经尝试过'$(teamcity_build_vcs_branch_)',无论是大写和小写,有和没有尾随下划线:这些都没有工作,而$(BUILD_NUMBER)仍然起作用。 –

相关问题