gpt4 book ai didi

build - 有没有办法获得建筑状态作为属性(property)?

转载 作者:行者123 更新时间:2023-12-04 15:58:11 25 4
gpt4 key购买 nike

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

##teamcity[testStarted name='test1']
##teamcity[testFailed name='test1' message='failure message' details='message and stack trace']

其中显示在构建概述和测试选项卡中的 teamcity 中。

Teamcity 识别失败的测试,如果任何测试失败,它将构建标记为失败:
http://i.stack.imgur.com/Qz9UT.png

稍后在 MSBuild 目标中,我想根据测试结果标记 cvs。
有没有办法将构建状态(如果失败、挂起、警告)作为属性?类似 %build.status% 的东西?格式无关紧要 - 如果它是字符串或数字。

PS:我知道我的问题的最佳解决方案是修改应用程序以在测试失败时返回非零退出代码。

最佳答案

TeamCty 似乎没有直接公开这一点,但可以使用 REST api 获取状态。这是一个使用 curl 的例子;但是您也可以使用 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 项目,然后使用正则表达式从中获取状态。您只需提供 tc_usertc_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) &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>

这打印:
BuildStatus = FAILURE

关于build - 有没有办法获得建筑状态作为属性(property)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com