获取 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构建中返回“错误:无法获取本地颁发者证书”

使用 CORS 从 TeamCity API 获取 JSON

TeamCity 不会触发自动构建

Teamcity 自动构建配置