如何使脚本输出更有意义的错误消息?

How to make script output a more meaningful error message?

提问人:F-H 提问时间:7/14/2023 最后编辑:F-H 更新时间:7/17/2023 访问量:115

问:

我们正在设置Azure DevOps管道,用于拉取请求中的所需检查。在这些管道中,我们使用脚本块执行自定义代码:

- script: |
    ...
  displayName: "Execute XYZ"
  continueOnError: false

如果此脚本失败,则整个管道将失败,这很好。

但是,DevOps 中的拉取请求概述页会显示以下信息:

errors in PR overview page

那是:

  • 一个红色的 X 图标和消息“1 of ...所需的检查失败了“,很明显,但非常肤浅。
  • 红色 X 图标和失败检查的名称。与前一个同样可见,但在复杂的多步骤检查的情况下也不是很详细。
  • 消息“集成/”。这实际上有些帮助,但它的样式使我在浏览页面时几乎察觉不到它。
  • 实际的错误消息,其样式与页面的其余部分形成鲜明对比,实际上是我查看页面时引起我注意的第一件事。

最后一个要素是我期望获得有关该问题的最大具体信息的地方。不幸的是,当脚本失败时,此处显示的消息是完全无用的:

Bash 退出,代码为“1”。

可以肯定地说,如果 PR 显示这一点,团队中的许多开发人员可能会认为管道有问题并联系(从而阻止)DevOps 管理员,而不是自己检查构建详细信息。

我希望在那里显示的内容是例如(取决于脚本的实际功能):

  • “单元测试中出现 2 个错误。”
  • “在文件 Info.ts、List.ts 和其他 5 个文件中检测到样式指南违规。”
  • “缺少必需的文件 /PluginManifest.xml。”

显然,我可以在适当的情况下在脚本块中提供这样的消息,但问题是:我能否以某种方式使此消息出现在 PR 概述页面的错误摘要中,而不是那个不起眼的返回代码?

azure-devops azure-pipelines 错误消息

评论


答:

0赞 Krzysztof Madej 7/14/2023 #1

您将无法更改此行为,但可以向 PR 添加注释。

请看一下这里关于SO的回复。它将允许您将任何 Markdown 样式的文本添加到 PR。甚至像这样的东西enter image description here

如果你想添加一些更简单的东西,你可以使用这个代码

  - powershell: |
      $body = @"
      {
          "comments": [
            {
              "parentCommentId": 0,
              "content": "Your comment here",
              "commentType": 1
            }
          ],
          "status": 4
        }
      "@
      $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:Build_Repository_Name)/pullRequests/$($env:System_PullRequest_PullRequestId)/threads?api-version=5.1"
      $result = Invoke-RestMethod -Uri $url -Method POST -Headers @{Authorization = "Bearer $(System.AccessToken)"} -Body $Body -ContentType application/json
    displayName: Post comment on PR

但在此之前,请确保生成服务有权参与存储库中的拉取请求。

0赞 F-H 7/17/2023 #2

实际上,答案已经在另一个问题中

日志记录命令是这里的解决方案。写入 stdout 将使您写入的任何内容(如果这是记录的第一个错误)都不会出现在错误摘要中。"##vso[task.logissue type=error;]..."...

请注意,这只是将错误消息放在输出中;您仍然必须单独确保您的脚本(以及管道阶段)实际上被视为失败,例如通过显式设置非零退出代码。