当前 运行 TeamCity 构建是否有可能检测到它是 "history build"?

Is it possible for a currently running TeamCity build to detect that it is a "history build"?

当前 运行 TeamCity 构建是否可以通过构建参数或 api 调用检测到它是 "history build"?我的构建配置以发布 NuGet 包结束,如果检测到 "History build",我想推迟发布。 TeamCity 服务器似乎已经检测到此状态,因为 运行 构建显示为灰色。

可以使用REST API。类似于 http://MyTeamCity/app/rest/builds/BUILD_ID.

要获取当前构建的 BUILD_ID,请使用 %teamcity.build.id%(TeamCity 参数)。

调用 returns XML 包含有关给定构​​建的详细信息。如果是历史,则有一个 history="true" 属性。

我的团队在历史构建和 nuget 包方面遇到了类似的问题。使用 sferencik 的提示,我能够将以下 PowerShell 脚本放在一起作为我们所有构建项目的第一步运行(确保并将 "Format stderr output as" 的 PowerShell 运行器选项设置为错误)。这将导致构建在检测到历史构建时停止。

Write-Host "Checking for history build."

$buildUrl = "%teamcity.serverUrl%/app/rest/builds/%teamcity.build.id%"

Write-Host "URL for build data is $buildUrl"

$wc = New-Object System.Net.WebClient
$cred = New-Object System.Net.NetworkCredential("%system.teamcity.auth.userId%", "%system.teamcity.auth.password%")
$wc.Credentials = $cred

[xml]$buildXml = $wc.DownloadString($buildUrl)

$isHistory = $buildXml.build.GetAttribute("history") -eq "true"

if ($isHistory) {
    Write-Host "##teamcity[buildProblem description='This is a history build and is being abandoned.']"
    Write-Error "Build is history" 
} else {
    Write-Host "Build is not history"
}