如何通过 Jenkins 在 运行 Powershell 脚本时修复 'script returned exit code 1'?
How to fix 'script returned exit code 1' when running Powershell script through Jenkins?
我有一个运行一些 Unity 单元测试的 Powershell 脚本。失败时,此 returns 代码 1,Jenkins 将其解释为失败并停止当前构建。我该如何避免这种行为?
注意:这个问题几乎与 相同,但那个问题使用 bash,所以我不能将它应用到我的问题中。换句话说,我如何模仿 Powershell 中的 set +e
行为?或者,我如何告诉 Jenkins 忽略这些脚本 return 代码并继续构建?
how do I mimic the set +e
behavior in Powershell
您不必 - 这是 默认 调用外部程序 的行为 [1 ] 导致执行过早停止,即使它们报告非零退出代码也是如此。
Alternatively, how do I tell Jenkins to ignore these script return codes and to continue the build anyway?
确保您的脚本始终以 exit 0
终止确实是确保 Jenkins 不认为脚本调用失败的正确方法(尽管您会丢失有关测试是否失败的信息).
[1] 它可能 意外发生 ,由于 PowerShell 7.1 之前的缺陷行为:如果您使用 2>
重定向和 $ErrorActionPreference = 'Stop'
恰好有效,当实际接收到 stderr 输出时会发生脚本终止错误。还有 pending RFC #277,建议引入 opt-in 机制,以便将外部程序调用正确集成到 PowerShell 的错误处理中。
我有一个运行一些 Unity 单元测试的 Powershell 脚本。失败时,此 returns 代码 1,Jenkins 将其解释为失败并停止当前构建。我该如何避免这种行为?
注意:这个问题几乎与 set +e
行为?或者,我如何告诉 Jenkins 忽略这些脚本 return 代码并继续构建?
how do I mimic the
set +e
behavior in Powershell
您不必 - 这是 默认 调用外部程序 的行为 [1 ] 导致执行过早停止,即使它们报告非零退出代码也是如此。
Alternatively, how do I tell Jenkins to ignore these script return codes and to continue the build anyway?
确保您的脚本始终以 exit 0
终止确实是确保 Jenkins 不认为脚本调用失败的正确方法(尽管您会丢失有关测试是否失败的信息).
[1] 它可能 意外发生 ,由于 PowerShell 7.1 之前的缺陷行为:如果您使用 2>
重定向和 $ErrorActionPreference = 'Stop'
恰好有效,当实际接收到 stderr 输出时会发生脚本终止错误。还有 pending RFC #277,建议引入 opt-in 机制,以便将外部程序调用正确集成到 PowerShell 的错误处理中。