如何在Teamcity中设置构建编号?

8

我正在尝试使用PowerShell在TeamCity中设置构建编号格式(类似于这篇Octopus Deploy 博客文章)。

然而,我不知道自那时以来TeamCity如何处理服务消息是否发生了变化,或者我做错了什么,因为它没有起作用。

我在我的构建配置中将以下Powershell脚本作为第一步:

$buildCounter = "%build.counter%" 
$buildConfig = "%system.buildconfig%"
$version = "%system.majorMinorVersion%"

$branch = "%vcsroot.branch%"

if ($branch.Contains("/")) 
{
    $branch = $branch.substring($branch.lastIndexOf("/")).trim("/")
}

$buildNumber = "${version}.${buildCounter}-${branch}"

Write-Host "##teamcity[buildNumber '$buildNumber']"

我也尝试过在第5行使用$branch = "%teamcity.build.branch%"

因此,当我尝试这样做时,if语句不会运行,因为尽管Octopus Deploy给出的示例中$branch被设置为%vcsroot.branch%的实际值,但实际上它并没有,它写出到Teamcity的结果是字面意义上的##teamcity[buildNumber '$buildNumber']。然而,这似乎是可行的,但构建号不能包含/,因此我的构建失败,因为分支被设置为refs/head/master而不仅仅是master

我错在哪里了?


我使用 PowerShell,例如 if ("%teamcity.build.branch%".StartsWith("...")),并且您还拥有编写构建编号的正确语法。如果在 if 语句之后输入 Write-Host $branch,它会输出什么? - Matt
这可能会有用:我们使用基于Node的CLI工具来完成此操作,请参见:https://github.com/nice-digital/teamcity-build-number。我们构建拉取请求,因此我们使用GitHub API查找分支名称,但是相同的原则适用。它在幕后使用TeamCity服务消息。对于任何阅读此问题的人来说,它可能作为一个有用的参考。 - Ian Routledge
2个回答

12

看起来脚本的最后一行应该是:

Write-Host "##teamcity[buildNumber '${buildNumber}']"

请注意:为了使脚本正常工作,应在TeamCity构建步骤中将其指定为内联脚本(这使得TeamCity的%-引用符可用)。

顺便说一句,您可以通过在VCS根中使用+:refs / heads / * 分支规范 ,使TeamCity显示短分支名称


3
如果您在使用PowerShell,则可将构建号作为环境变量提供给代理,在PowerShell中,命令如下:
$env:BUILD_NUMBER

这是一个可以通过构建配置界面进行配置的数字。


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