powershell - 如何在 TeamCity PowerShell 运行程序中传播错误

标签 powershell error-handling teamcity

我有一个 TeamCity 7 构建配置,它几乎只是对 .ps1 的调用。使用各种 TeamCity 参数的脚本。
我希望这可能是一个简单的设置问题:

  • 脚本

    File


  • 脚本文件

    %system.teamcity.build.workingDir%/Script.ps1


  • 脚本执行模式

    Execute .ps1 script with "-File" argument


  • 脚本参数

    %system.teamcity.build.workingDir% -OptionB %BuildConfigArgument% %BuildConfigArg2%



  • 然后我会期望:
  • 如果我弄乱了我的参数并且脚本无法启动,则构建失败
  • 如果我的 Script.ps1 脚本抛出,构建失败
  • 如果脚本exit s 与非 0错误级别 我希望构建失败(也许这不是惯用的 PS 错误管理 - .ps1 是否应该仅在没有异常的情况下报告成功?)

  • 问题:它只是行不通。它应该如何工作?有什么我做错的事情可以通过选择不同的选项来解决吗?

    最佳答案

    正如 the friendly TeamCity manual 中所述:

    Setting Error Output to Error and adding build failure condition

    In case syntax errors and exceptions are present, PowerShell writes them to stderr. To make TeamCity fail the build, set Error Output option to Error and add a build failure condition that will fail the build on any error output.



    完成这项工作的关键是改变 两个默认值:
  • 的顶层构建失败条件 , 打开 构建运行程序记录了一条错误消息:
  • 在 [PowerShell] 构建步骤 , 显示高级选项并设置错误输出:错误


  • 在 9.1 中,以下工作(如果它也适用于早期版本,我不会感到惊讶):
  • 使用默认选项创建 PowerShell 构建步骤
  • 将下拉列表更改为脚本:源代码
  • 添加 trap { Write-Error "Exception $_" ; exit 98 }在脚本顶部
  • (对于适合 TeamCity 构建脚本的脚本类型,可选但更正确的 IMO)

    显示高级选项并打开选项:添加 -NoProfile 参数
  • (可选,但对我来说这应该是默认值,因为它呈现得更清晰 as suggested by @Jamal Mavadat )

    显示高级选项并打开错误输出:错误

    (旁白@JetBrains:如果标签是“将标准错误输出格式设置为”,那么误导性会降低)

  • 这包括以下情况:
  • 解析错误 [冒泡为异常并立即停止执行]
  • 异常(exception) [ throw n 直接或间接在您的 PS 代码中显示并触发 TC 的退出代码以停止构建]
  • 一个明确的 exit n在脚本中传播到构建(如果非零则失败)
  • 关于powershell - 如何在 TeamCity PowerShell 运行程序中传播错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647987/

    相关文章:

    javascript - 在捕获之前编辑抛出的错误?

    asp.net-mvc - 为什么 Nant 不与 TeamCity 合作?

    powershell - 比较两个CSV并仅导出两个都不存在的名称列表

    乱序接收的 PowerShell 事件

    powershell - 关于迭代的哈希表与自定义对象数组

    python - 使用大型数据集时发生内存错误

    powershell - 在 Powershell 中为批处理文件设置变量

    powershell - PowerShell抑制 `$Error`中的特定错误

    powershell - 单个构建步骤的 TeamCity 构建日志

    maven - Teamcity:从 Nexus 更新构建服务器上的本地 Maven 存储库