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