6

我可能忽略了 TeamCity 中的内置参数。我正在尝试将构建状态作为参数发送到控制台应用程序。控制台应用程序是一个构建步骤,即使前面的步骤失败,它也需要运行。如果前面的步骤失败,它将做一件事,如果前面的步骤成功,它将做另一件事。

我已将控制台应用程序设置为采用构建状态参数,但我没有找到要使用的内置构建状态参数(成功/失败)。我错过了一些简单的事情吗?如何访问构建状态?

谢谢!

4

3 回答 3

6

过去我不得不做类似的事情,但没能找到可以注入的内置属性来传递状态。

最后,我在前一个构建步骤中使用服务消息将参数传递到后续步骤 - 打印出一条消息,例如##teamcity[setParameter name='build.state' value='ok']可用于创建构建属性以从一个步骤到另一个步骤的线程状态。

我见过有人使用 TeamCity REST API 从构建步骤中查询正在运行的构建状态的方法,但之前的方法对我来说足够简单。

于 2014-07-31T21:29:53.937 回答
1

我最终使用了这里找到的解决方案:

http://mnaoumov.wordpress.com/2013/01/31/get-teamcity-build-status-from-powershell/

我刚刚在控制台应用程序的 C# 中创建了相同的逻辑来获取构建状态。

于 2014-08-01T01:16:36.110 回答
1

我已经尝试了user2097151 答案中链接中的代码,但起初它没有用。所以我修改了它。我将在这里发布修改:

[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

该解决方案不会在这是最后一个版本中进行中继。

我发送凭据的方式是在线程中找到的。我在这个线程中找到了 TLS 版本更改。

希望它可以帮助某人。

于 2018-01-26T17:59:19.933 回答