【问题标题】:Get TeamCity build status获取 TeamCity 构建状态
【发布时间】:2016-12-14 01:48:08
【问题描述】:

我有 Teamcity 正在运行构建,它具有 *.msi 安装程序的工件输出,我需要标记成功和失败的测试构建,例如

<filename>_<build_status>.msi

即使某些测试失败,我也已将 TC 设置为构建安装程序,以便将其发送给我们的测试人员。所以问题是在不使用 REST 的情况下从 TeamCity 环境中接收构建状态。

【问题讨论】:

  • 为什么不将构建和测试拆分为单独的构建配置?无论哪种方式,您都可以将构建配置中的各个步骤配置为始终运行,即使上一步失败。
  • 我有单独的“测试”构建配置,但我还需要在使用安装程序输出进行另一个构建之前运行测试,问题是我无法从环境变量或从参数。 REST 不是最好的解决方案,所以我需要替代方案。
  • 除非您想查询系统文件(例如日志并查找一些正则表达式),否则我认为 REST 是您唯一可行的解​​决方案。它有效,您只需几行代码即可获得状态。

标签: continuous-integration teamcity


【解决方案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 没有任何问题,但我很高兴它让您走上了正确的轨道。
    猜你喜欢
    • 2014-09-23
    • 2013-11-19
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多