首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种将生成状态作为属性获取的方法?

是否有一种将生成状态作为属性获取的方法?
EN

Stack Overflow用户
提问于 2014-02-17 15:18:41
回答 1查看 833关注 0票数 6

我有一个使用MSBuild的丑陋的Teamcity构建配置。它执行自定义应用程序(测试运行程序),该应用程序使用自定义消息传递向teamcity报告测试结果。

代码语言:javascript
运行
复制
##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:我知道最好的解决方案是修改应用程序,如果测试失败,返回非零退出代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-25 14:48:02

TeamCty似乎没有直接公开这一点,但是可以使用REST获取状态。这里有一个使用curl的例子;但是您也可以使用uwe PowserShell的Invoke-RestMethod。

下面是我用来测试的引导测试失败的msbuild脚本:

代码语言:javascript
运行
复制
<?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_usertc_password属性(或允许来宾访问),并更改url以匹配您的服务器。

代码语言:javascript
运行
复制
<?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) &gt; $(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>

这些指纹:

代码语言:javascript
运行
复制
BuildStatus = FAILURE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21832760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档