Continuous integration 获取TeamCity构建状态

Continuous integration 获取TeamCity构建状态,continuous-integration,teamcity,Continuous Integration,Teamcity,我已经让Teamcity运行构建,它有*.msi安装程序的工件输出,我需要标记成功和失败的测试构建,比如 <filename>_<build_status>.msi \uuu.msi 我已经将TC设置为构建安装程序,即使某些测试失败,也可以将其发送给我们的测试人员。因此,问题是从TeamCity环境接收构建状态,而不使用REST。我知道您说过不想使用REST,但您需要做的只是对该URL执行GET请求,替换您的构建配置id。在我看来,这是最简单的方法(前提是安装程序构建

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

<filename>_<build_status>.msi
\uuu.msi

我已经将TC设置为构建安装程序,即使某些测试失败,也可以将其发送给我们的测试人员。因此,问题是从TeamCity环境接收构建状态,而不使用REST。

我知道您说过不想使用REST,但您需要做的只是对该URL执行GET请求,替换您的构建配置id。在我看来,这是最简单的方法(前提是安装程序构建配置是单独的构建)

如果您需要帮助实现这一点,请让我知道

实施 1) 添加要设置为GET请求输出的参数

2) 添加PowerShell步骤并将代码作为源代码运行-

3) 更新下面突出显示的相关参数以匹配您的设置


希望这有帮助

我意识到您说过不想使用REST,但您所需要做的就是对该URL执行GET请求,替换您的构建配置id。在我看来,这是最简单的方法(前提是安装程序构建配置是单独的构建)

如果您需要帮助实现这一点,请让我知道

实施 1) 添加要设置为GET请求输出的参数

2) 添加PowerShell步骤并将代码作为源代码运行-

3) 更新下面突出显示的相关参数以匹配您的设置


希望这有帮助

这是我用来回答另一个问题的答案,所以这个问题也适用

它适用于TeamCity Enterprise 2017.1.2(构建46812)

你可以找到我最初的答案

[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']"

这个答案我用来回答另一个问题,所以这个问题也适用

它适用于TeamCity Enterprise 2017.1.2(构建46812)

你可以找到我最初的答案

[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']"

为什么不将构建和测试拆分为单独的构建配置?无论哪种方式,您都可以将生成配置中的各个步骤配置为始终运行,即使上一步失败。我有单独的“测试”生成配置,但在使用安装程序输出生成另一个生成之前,我还需要运行测试,问题是我无法从环境变量或参数中检索生成状态。REST不是最好的解决方案,所以我需要其他解决方案。除非你想互操作系统文件(比如日志和寻找一些正则表达式),否则我认为REST是你在这里唯一可行的解决方案。它可以工作,并且您可以在几行代码中获得状态。为什么不将构建和测试拆分为单独的构建配置?无论哪种方式,您都可以将生成配置中的各个步骤配置为始终运行,即使上一步失败。我有单独的“测试”生成配置,但在使用安装程序输出生成另一个生成之前,我还需要运行测试,问题是我无法从环境变量或参数中检索生成状态。REST不是最好的解决方案,所以我需要其他解决方案。除非你想互操作系统文件(比如日志和寻找一些正则表达式),否则我认为REST是你在这里唯一可行的解决方案。我想,我必须开始处理REST,我只是想到了一些变量/参数或其他解决方法。据我所知,最好的方法是使用Powershell脚本来实现这一点?如果你能帮我解决这个问题,我将不胜感激。我已经用一个实现更新了答案。一旦该步骤运行,您的TeamCity参数将在构建期间填充该值,您可以在后续步骤中正常引用该参数,即在命名安装程序输出的位置Hanks,它可以工作)非常遗憾,我只能做+1,%system…%不工作,我为该脚本添加了用户,但重要的是,密码应该是这样的:
$pass=urpass | ConvertTo SecureString-AsPlainText-Force
,否则PSCredential显示重载错误%system.teamcity.auth.password%附近曾经有一个错误,所以它取决于您正在运行的TC的版本。我可以确认该脚本在构建9.1.6时可以正常工作,但我很高兴它让您走上了正确的轨道。我想,我必须开始处理REST,我只是想到了一些变量/参数或其他解决此问题的方法。据我所知,最好的方法是使用Powershell脚本来实现这一点?如果你能帮我解决这个问题,我将不胜感激。我已经用一个实现更新了答案。一旦该步骤运行,您的TeamCity参数将在构建期间填充该值,您可以在后续步骤中正常引用该参数,即在命名安装程序输出的位置Hanks,它可以工作)非常遗憾,我只能做+1,%system…%不工作,我为该脚本添加了用户,但重要的是,密码应该是这样的:
$pass=urpass | ConvertTo SecureString-AsPlainText-Force
,否则PSCredential显示重载错误%system.teamcity.auth.password%附近曾经有一个错误,所以它取决于您正在运行的TC的版本。我可以确认该脚本对build 9.1.6有效,没有任何问题,但我很高兴它让您走上了正确的轨道。