如何将分支名称传递给TeamCity中的MSBuild脚本?
我已经让TeamCity跨多个Mercurial分支构建了一个配置。作为构建过程的一部分,我想根据从中构建的分支命名一些输出 我尝试使用如何将分支名称传递给TeamCity中的MSBuild脚本?,msbuild,teamcity,teamcity-7.0,Msbuild,Teamcity,Teamcity 7.0,我已经让TeamCity跨多个Mercurial分支构建了一个配置。作为构建过程的一部分,我想根据从中构建的分支命名一些输出 我尝试使用$(TEAMCITY\u BUILD\u BRANCH),试图从TEAMCITY获取TEAMCITY.BUILD.BRANCH属性,但我只得到一个空字符串。我成功地使用了$(BUILD\u NUMBER)将BUILD.NUMBER属性添加到脚本中,因此我对所需的内容有点困惑。$(vcsroot\u url)如果您只有一个vcs根连接到构建配置 如果这不是您想要的
$(TEAMCITY\u BUILD\u BRANCH)
,试图从TEAMCITY获取TEAMCITY.BUILD.BRANCH
属性,但我只得到一个空字符串。我成功地使用了$(BUILD\u NUMBER)
将BUILD.NUMBER
属性添加到脚本中,因此我对所需的内容有点困惑。$(vcsroot\u url)如果您只有一个vcs根连接到构建配置
如果这不是您想要的-请尝试获取所有已知属性,如下所述:
仅参考服务器属性:
您可以通过添加
将system.teamcity.debug.dump.parameters属性添加到生成
配置并检查“可用的仅供参考的服务器”
生成日志中的“属性”部分
UPD:你也可以检查一下
TeamCity提供的Git和Mercurial的VCS分支参数
具有已知VCS分支名称的其他生成参数
开始构建的时刻。如果生成从
refs/heads/bugfix分支,TeamCity将添加一个配置参数
使用以下名称:teamcity.build.vcs.branch.=refs/heads/bugfix
其中是VCS根目录的名称,所有
非字母数字字符将替换为389;
根据这一点-您应该能够按照以下msbuild变量访问分支
$(teamcity_build_vcs_branch_)
希望这次我能正确理解你的问题
PS:很抱歉最初的误导-我不知道TeamCity中DVC和CVC之间有如此细微的区别。无论如何-我的初始答案也可以帮助您-您可以获取所有变量,然后使用所需的正确数据找到准确的变量名只需创建一个构建参数:
system.branch_name = %teamcity.build.vcs.branch.Your_Project%
项目名称中的任何非字母数字字符应替换为“\u1”。
在msbuild中,使用$(分支名称)
引用参数
类似于charm:-)@Alexy我正在使用Mercurial,因此分支名称不是URL,而是存储库中的名称。我不太明白在MSBuild脚本中引用给定的生成参数需要什么。如果使用TeamCity进行生成-它将向MSBuild上下文发出它自己的一些环境变量,并且您可以像访问以前定义的属性一样访问它。这与TeamCity中的BUILD.NUMBER变为可用于msbuild脚本的$(BUILD\u NUMBER)的方式相同。Teamcity通常会发布许多有用的信息-您可以查看文档以了解详细信息。当你问起如何访问分支机构名称时,我想你可以从vcs url中提取它。不幸的是,我没有与Mercurual合作的Teamcity作为风投,这里只有svn。我找到了更多关于这一点的澄清,并将其附加到我的回答中。我尝试了
$(teamcity\u build\u vcs\u branch\u)
,包括大写和小写,带有或不带尾随下划线:这些都不起作用,而$(build\u NUMBER)仍然起作用。刚刚注意到-变量的最后一部分被消毒剂吃掉了$(teamcity_build_vcs_branch_your-vcsroot-name-此处)。此外,“您可以通过将system.teamcity.debug.dump.parameters属性添加到生成配置并检查生成日志中的“Available reference only server properties”部分来获取全套仅供参考的服务器属性。”尝试过-它获取\refs\head\whater,其中“whater”是实际的分支name@chester89您可以使用括号指定名称子匹配:例如refs/head/(master)
、refs/head/release/(*)
或refs/head/(feature/*)
…以获取“master”、“1.2.3”和“feature/some name”在分支名称周围使用括号时,仅生成分支名称(不带“refs/head/”)出现在TeamCity UI中的%TeamCity.build.vcs.branch.Your_Project%参数仍然被解析为一个包含refs/heads的值。我使用的是TeamCity的8.0.6版本。@Alexander Marinov:如何将分支名称传递给需要作为构建步骤从TeamCity运行的脚本