在TeamCity构建期间由CAKE引发的异常但在本地不可重现

时间:2017-10-16 13:27:16

标签: c# powershell teamcity cakebuild

我使用CAKE 0.22.0。

在我的一个构建步骤中,我添加了一个Finally子句。在Finally内,我调用RunPowershellScript方法,该方法又执行驻留在版本控制中的Powershell脚本。

在主源代码库的本地克隆中进行测试时,一切都成功运行,在任何阶段都没有抛出异常。

但是,在TeamCity上,RunPowershellScript方法向System.NullReferenceException投掷了错误消息Object reference not set to an instance of an object.

enter image description here

我登录了我的构建代理,并且能够100%放心地验证PowerShell脚本是否正常运行。

问题:  1. 为什么抛出异常,即使PowerShell脚本在构建代理上成功执行了?  2.为什么我无法在本地重现错误?

附录1:

在回复Matt's comment时,我决定通过将$ErrorActionPreference设置为Stop来检查我的脚本是否抛出了任何非终止错误。

我的脚本运行完成而不会在我的本地计算机上抛出任何错误(终止或以其他方式)。当我登录到构建代理程序时,我还可以看到脚本已成功运行完成。所以我现在真正不理解的是为什么在TeamCity上构建失败,即使PowerShell脚本运行100%

附录2:

在远程构建代理上发生另一次构建失败后(抛出相同的异常),我再次登录进行调查。在我的Powershell脚本中,我有一个字典,其中键是string s,值是string[] s。我还有一个for循环,它枚举了所提供密钥的所有值。

这次,我能够验证枚举在数组中的第一项之后停止,并且此时抛出了异常。以前,即使数组中的所有项都是枚举的,也会抛出异常。 CAKE的Powershell加载项中是否存在错误?

当我通过直接调用Powershell脚本(即使用CAKE的Powershell加载项而不是)来测试它时,枚举完成的所有值都没有任何打嗝。当我在本地计算机上运行build.cake进行测试时,它也成功运行完成。

所以在我看来,只有在TeamCity构建期间,CAKE才会抛出异常消息,无论PowerShell脚本是否成功执行。

1 个答案:

答案 0 :(得分:1)

我怀疑TeamCity正在寻找poweshell脚本的返回代码。您可能需要让它返回0.

您可以通过添加:

来完成此操作
EXIT 0;

到脚本的末尾。如果0不起作用,请尝试1.