在TeamCity中获取Git的短分支名称

43
我正在使用Teamcity 8.x.x版本。我为我的Teamcity配置了持续部署。我需要一个功能分支部署的功能。我看到了这个文档"http://confluence.jetbrains.com/display/TCD8/Working+with+Feature+Branches"。
我正在尝试在我的Teamcity上实施这个文档。我遇到了一个问题。
我的部署配置使用了"OctoPack"(nuget)。我的nuget包需要构建计数和分支名称。例如:1.0.0.356-feature-1。
我正在尝试使用这个版本控制。
%build.number%-%teamcity.build.vcs.branch.VCS_ROOT_ID% ----> 1.0.0.356-refs/head/feature-1

这个版本不支持NuGet版本控制。NuGet不支持斜杠“/”。
我需要这个,
%build.number%-%teamcity.build.vcs.SHORT_BRANCH_NAME.VCS_ROOT_ID% ---> 1.0.0.356-feature-1

怎么办?

你能分享一下你是如何解决这个问题的吗? - Lars Stenberg
1
你好,请尝试这个:%build.number%-%teamcity.build.branch% - Ömer Faruk Aplak
5
@LarsStenberg,我知道可能为时已晚,但当我看到被接受的答案时,我也在思考同样的问题。所以我加了这个评论,如果将来有任何人需要帮助的话。实际上,你需要的是分支规范来给出正确的逻辑分支名称。这在这里清楚地提到了:https://confluence.jetbrains.com/display/TCD10/Working+with+Feature+Branches#WorkingwithFeatureBranches-Logicalbranchname。然后你可以使用%teamcity.build.branch%,因为它基本上是逻辑分支名称。 - bigbearzhu
@bigbearzhu,你能否把那个作为答案添加进去?我本来可以自己做的,但是你应该得到这个功劳。 - JamesQMurphy
2个回答

34

非常感谢,我一直在到处寻找这个。 - chester89
17
实际上,它是%teamcity.build.branch%。%vcsroot.branch% 只会给您默认设置的内容,通常不如大多数人所需的实用。 - starmandeluxe
处理<default>分支名称 - 如果想将分支名称用作zip文件工件的一部分,可以参考这篇有用的文章:https://stackoverflow.com/questions/42922880/teamcity-show-branch-in-artifact-zip-name - Mr. Girgitt

2
我发现如果你在版本控制系统中只设置了一个分支,那么%teamcity.build.branch%将无法定义。如果你定义了多个分支,那么%vcsroot.branch%只会报告默认分支的名称。
我最终使用了git命令来获取当前分支的名称。 Powershell: $branch = (git symbolic-ref --short HEAD) | Out-String 命令行:
FOR /F "tokens=* USEBACKQ" %%%%F IN (`git symbolic-ref --short HEAD`) DO (
SET branchName=%%%%F
)
ECHO %%branchName%%

TeamCity将所有的%%转换为%,所以这就是为什么有那么多%的原因。

设置为环境变量

如果您想将分支名称作为环境变量在项目的其他步骤中使用,您可以使用PowerShell设置分支名称。首先在构建配置中定义env.currentBranch,然后使用以下PowerShell脚本作为第一个构建步骤来设置它。

$branch = (git symbolic-ref --short HEAD) | Out-String
Write-Host "##teamcity[setParameter name='env.currentBranch' value='$branch']"

老实说,我不知道为什么到现在还没有将这个功能内置到 TC 中。 - AndyMoose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接