C# TeamCity overview中未显示CAKE任务中的错误
我使用CAKE 0.22.0和TeamCity 9.x 在TeamCity中,我只有一个构建步骤调用C# TeamCity overview中未显示CAKE任务中的错误,c#,powershell,teamcity,cakebuild,C#,Powershell,Teamcity,Cakebuild,我使用CAKE 0.22.0和TeamCity 9.x 在TeamCity中,我只有一个构建步骤调用build.ps1。反过来,它运行build.cake 在build.ps1中,我添加了以下内容: trap { write-output $_ ##teamcity[buildStatus status='FAILURE' ] exit 1 } 原因是为了规避(即,使用-file执行脚本时,如果不应该返回退出代码0) 在build.ps1中引发异常时,TeamCity会
build.ps1
。反过来,它运行build.cake
在build.ps1
中,我添加了以下内容:
trap
{
write-output $_
##teamcity[buildStatus status='FAILURE' ]
exit 1
}
原因是为了规避(即,使用-file
执行脚本时,如果不应该返回退出代码0)
在build.ps1
中引发异常时,TeamCity会正确显示生成失败:
但是,如果在build.cake
中发生错误,TeamCity会错误地宣称一切都成功运行:
下面是上面屏幕截图引用的“成功”构建的相应构建日志:
如您所见,错误是在build.cake
任务中抛出的。此错误未被build.ps1
中的trap
子句捕获,因此没有通知TeamCity构建失败
我考虑在build.cake
中的所有任务中添加一个OnError
子句(该子句将包含类似于的信息(@“一些错误消息\n##teamcity[buildStatus='FAILURE']]”
),但这将导致大量重复代码
是否有一种简洁的方法来确保
build.cake
中的任务中抛出的任何错误都被捕获在build.ps1
中的trap
子句中?cake本身使用这些构建步骤设置构建在TeamCity上,当cake脚本报告构建失败时,构建失败
流道类型:PowerShell
步骤名称:构建蛋糕
如果前面的所有步骤都成功完成,则执行步骤:
PowerShell版本:3.0
平台:自动
版本:桌面
将标准输出格式化为:警告
工作目录:
脚本:源代码
脚本源:
.\build.ps1
exit $LASTEXITCODE
脚本执行模式:从外部文件执行.ps1
下面是我们设置的屏幕截图
我想你可能找错人了。只有在Powershell脚本引发异常时,
trap
修复程序才会对您有所帮助。当使用cake时,PS脚本只是调用cake可执行文件并返回退出代码cake returns。Cake将处理任务中抛出的任何异常。事实上,您的构建日志显示进程已退出,代码为1
,我认为PS脚本正在返回正确的代码,并且您的构建步骤可能没有使用退出代码来指示错误。我将检查您的TeamCity构建步骤。@谢谢您的回复!在我的TeamCity构建步骤中,参数Format stderr output as
设置为Warning
。这可以解释为什么TeamCity将生成显示为成功吗?对不起,我在最初的评论中弄错了,设置不在各个生成步骤中,而是在生成配置的“失败条件”部分中。确保已选中生成过程退出代码不为零。@heavyd感谢您的建议。我已经检查了我的失败条件,并且构建过程退出代码不是零
确实已检查,因此问题在别处…感谢您的回复!我已经采纳了你的建议,下次构建失败时我会报告回来——如果错误显示正确,那么我将接受你的回答。:-)好吧,那就休息一下吧;)您好,不幸的是,TeamCity继续声称失败的构建是成功的。然而,在将格式stderr输出从“警告”更改为“错误”后,我成功地实现了我想要的结果。根据TeamCity的文档(),“若要在“生成运行程序记录了错误消息”时使生成失败(请参阅生成失败条件),请将错误输出选择器的默认设置从警告更改为错误。”如果您更新您的答案以与TeamCity的文档保持一致,我将重新接受:-)谢谢!