c# - CAKE 在 TeamCity 构建期间抛出异常,但无法在本地重现

标签 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 来检查我的脚本是否抛出了任何非终止错误。

我的脚本运行完成,没有在我的本地机器上抛出任何错误(终止或其他)。当我登录到我的构建代理时,我还可以看到脚本已成功运行至完成。所以我现在真正不明白的是,为什么即使 PowerShell 脚本运行 100% 正常,但 TeamCity 上的构建还是失败了

附录 2:

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

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

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

因此在我看来,异常消息仅在 TeamCity 构建期间由 CAKE 抛出,无论 PowerShell 脚本是否成功执行。

最佳答案

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

您可以通过添加:

EXIT 0;

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

关于c# - CAKE 在 TeamCity 构建期间抛出异常,但无法在本地重现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46771517/

相关文章:

powershell - 在 Powershell 类中的静态方法中引用静态成员

ruby - 如何使用 TeamCity 在所有代理上安装 Ruby gems?

build - 如何清理 TeamCity 中旧的失败构建?

c# - 为什么我得到一个 OpenXmlUnknownElement?

c# - 异步使用 MySQL 数据库

c# - MSBuild 条件编译

c# - PowerShell 的 Get-ExecutionPolicy 返回不同的值

C# - httpWebRequest 流的大小是否有限制?

powershell - 在 PowerShell 中对齐 Select-String 的输出

continuous-integration - TeamCity 能否将一个构建的输出提交到另一个 svn 存储库,从而开始另一个构建?