Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TeamCity overview中未显示CAKE任务中的错误_C#_Powershell_Teamcity_Cakebuild - Fatal编程技术网

C# TeamCity overview中未显示CAKE任务中的错误

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会

我使用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.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的文档保持一致,我将重新接受:-)谢谢!