TeamCty似乎沒有直接暴露這個,但狀態可以使用REST api獲取。這是一個使用捲曲的例子;但你也可以舉例PowweShell的Invoke-RestMethod。
這裏的MSBuild的腳本casues測試失敗我用於測試:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Test">
<Message Importance="high" Text="##teamcity[testStarted name='test1']" />
<Message Importance="high" Text="##teamcity[testFailed name='test1' message='failure message' details='message and stack trace']" />
</Target>
</Project>
然後獲取當前構建的狀態,它轉儲到一個文件,該文件讀入一個MSBuild項目,然後使用腳本正則表達式來獲取它的狀態。您只需提供tc_user
和tc_password
屬性(或允許訪客訪問)並更改url以匹配您的服務器。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="GetBuildStatus">
<Target Name="RunCurl">
<PropertyGroup>
<MyTempFile>curl_out</MyTempFile>
</PropertyGroup>
<Exec Command="curl http://localhost/httpAuth/app/rest/builds/id:$(teamcity_build_id) -basic -u $(tc_user):$(tc_password) > $(MyTempFile)"/>
<ReadLinesFromFile File="$(MyTempFile)">
<Output TaskParameter="Lines" ItemName="CurlOutput"/>
</ReadLinesFromFile>
<Delete Files="$(MyTempFile)"/>
</Target>
<Target Name="GetBuildStatus" DependsOnTargets="RunCurl">
<PropertyGroup>
<CurlOutputFull>@(CurlOutput)</CurlOutputFull>
<BuildStatus>$([System.Text.RegularExpressions.Regex]::Match($(CurlOutputFull), `status="(\w*)"`).Groups[ 1 ].Value)</BuildStatus>
</PropertyGroup>
<Message Text="BuildStatus = $(BuildStatus)"/>
</Target>
</Project>
此打印:
BuildStatus = FAILURE
任何%ERRORLEVEL%0比其他手段構建失敗 – KMoraz
你能詳細一點。例如「*將測試結果報告給teamcity。*」這些結果如何在TC中完全顯示? 「*基於測試結果*」以什麼格式要求這些結果? 「*獲得構建狀態*」同樣的問題。什麼是構建狀態和/或您希望以何種格式? – stijn