获取 TeamCity 构建状态
Posted
技术标签:
【中文标题】获取 TeamCity 构建状态【英文标题】:Get TeamCity build status 【发布时间】:2016-12-14 01:48:08 【问题描述】:我有 Teamcity 正在运行构建,它具有 *.msi 安装程序的工件输出,我需要标记成功和失败的测试构建,例如
<filename>_<build_status>.msi
即使某些测试失败,我也已将 TC 设置为构建安装程序,以便将其发送给我们的测试人员。所以问题是在不使用 REST 的情况下从 TeamCity 环境中接收构建状态。
【问题讨论】:
为什么不将构建和测试拆分为单独的构建配置?无论哪种方式,您都可以将构建配置中的各个步骤配置为始终运行,即使上一步失败。 我有单独的“测试”构建配置,但我还需要在使用安装程序输出进行另一个构建之前运行测试,问题是我无法从环境变量或从参数。 REST 不是最好的解决方案,所以我需要替代方案。 除非您想查询系统文件(例如日志并查找一些正则表达式),否则我认为 REST 是您唯一可行的解决方案。它有效,您只需几行代码即可获得状态。 【参考方案1】:我用于其他 SO 问题的这个答案也适用于这个答案。
它适用于 TeamCity Enterprise 2017.1.2(内部版本 46812)
Here你可以找到我原来的答案。
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
$buildId = "%teamcity.build.id%"
function TeamCityBuildStatus
param
(
[string] $ServerUrl,
[string] $UserName,
[string] $Password,
[string] $BuildId
)
$client = New-Object System.Net.WebClient
$pair = "$($UserName):$Password"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$client.Headers.Add("Authorization", "Basic $encodedCreds")
$url = "https://$ServerUrl/httpAuth/app/rest/builds/$buildId/status"
$status = $client.DownloadString($url)
return $status -eq "SUCCESS"
$status = TeamCityBuildStatus -ServerUrl $teamcityUrl -UserName $teamcityUser -Password $teamcityPass -BuildId $buildId
Write-Host "##teamcity[setParameter name='Status' value='$status']"
【讨论】:
【参考方案2】:我知道您说过您不想使用 REST,但您需要做的就是对该 URL 执行 GET 请求,替换您的构建配置 ID。 IMO 这是最简单的方法(前提是安装程序构建配置是单独的构建)
/httpAuth/app/rest/builds/buildType:Installer_Build/status
如果您需要帮助实现此功能,请告诉我。
实施
1) 添加一个要设置为 GET 请求输出的参数
2) 添加一个 PowerShell 步骤并将代码作为源代码运行 - Get Build Status Gist
3) 更新下面突出显示的相关参数以匹配您的设置
希望对你有帮助
【讨论】:
猜猜,我必须开始处理 REST,我只是想到了一些变量/参数或其他解决方法来解决这个问题。据我了解,最好的方法是使用 Powershell 脚本来处理这些事情?如果您能帮我解决这个问题,我将不胜感激。 我已经用一个实现更新了答案。步骤运行后,您的 TeamCity 参数将使用构建期间的值填充,您可以在后续步骤中正常引用它,即您命名安装程序输出的位置 谢谢,它有效)很遗憾我不能做超过+1 另外,%system...% 没有用,我已经为这个脚本添加了用户,但重要的是该密码应该是这样的:$pass = urpass |ConvertTo-SecureString -AsPlainText -Force
,否则 PSCredential 显示过载错误
%system.teamcity.auth.password% 曾经有一个错误,因此它取决于您运行的 TC 版本。我可以确认该脚本适用于构建 9.1.6 没有任何问题,但我很高兴它让您走上了正确的轨道。以上是关于获取 TeamCity 构建状态的主要内容,如果未能解决你的问题,请参考以下文章
从 TeamCity 构建 VC++ 6 项目。找不到头文件
TeamCity 是不是支持执行其他 TeamCity 构建的构建步骤?
newman CLI在teamcity构建中返回“错误:无法获取本地颁发者证书”