我可能忽略了 TeamCity 中的内置参数。我正在尝试将构建状态作为参数发送到控制台应用程序。控制台应用程序是一个构建步骤,即使前面的步骤失败,它也需要运行。如果前面的步骤失败,它将做一件事,如果前面的步骤成功,它将做另一件事。
我已将控制台应用程序设置为采用构建状态参数,但我没有找到要使用的内置构建状态参数(成功/失败)。我错过了一些简单的事情吗?如何访问构建状态?
谢谢!
我可能忽略了 TeamCity 中的内置参数。我正在尝试将构建状态作为参数发送到控制台应用程序。控制台应用程序是一个构建步骤,即使前面的步骤失败,它也需要运行。如果前面的步骤失败,它将做一件事,如果前面的步骤成功,它将做另一件事。
我已将控制台应用程序设置为采用构建状态参数,但我没有找到要使用的内置构建状态参数(成功/失败)。我错过了一些简单的事情吗?如何访问构建状态?
谢谢!
过去我不得不做类似的事情,但没能找到可以注入的内置属性来传递状态。
最后,我在前一个构建步骤中使用服务消息将参数传递到后续步骤 - 打印出一条消息,例如##teamcity[setParameter name='build.state' value='ok']
可用于创建构建属性以从一个步骤到另一个步骤的线程状态。
我见过有人使用 TeamCity REST API 从构建步骤中查询正在运行的构建状态的方法,但之前的方法对我来说足够简单。
我最终使用了这里找到的解决方案:
http://mnaoumov.wordpress.com/2013/01/31/get-teamcity-build-status-from-powershell/
我刚刚在控制台应用程序的 C# 中创建了相同的逻辑来获取构建状态。
我已经尝试了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 版本更改。
希望它可以帮助某人。