我有一个使用MSBuild的丑陋的Teamcity构建配置。它执行自定义应用程序(测试运行程序),该应用程序使用自定义消息传递向teamcity报告测试结果。
##teamcity[testStarted name='test1']
##teamcity[testFailed name='test1' message='failure message' details='message and stack trace']
它显示在“构建概述和测试”选项卡的“团队城市”中。
Teamcity识别失败的测试,如果任何测试失败,它会将构建标记为failed:http://i.stack.imgur.com/Qz9UT.png
稍后,在MSBuild目标中,我想根据测试结果给cvs贴上标签。是否有一种方法将生成状态(如果它失败、挂起、警告)作为属性?有点像%build.status%?格式并不重要--如果是字符串还是数字。
PS:我知道最好的解决方案是修改应用程序,如果测试失败,返回非零退出代码。
发布于 2014-02-25 14:48:02
TeamCty似乎没有直接公开这一点,但是可以使用REST获取状态。这里有一个使用curl的例子;但是您也可以使用uwe PowserShell的Invoke-RestMethod。
下面是我用来测试的引导测试失败的msbuild脚本:
<?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项,然后使用regex将其状态提取出来。您只需提供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
https://stackoverflow.com/questions/21832760
复制相似问题