代码之家  ›  专栏  ›  技术社区  ›  F-H

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

  •  1
  • F-H  · 技术社区  · 3 年前

    我们正在设置Azure DevOps管道,用于拉取请求中所需的检查。在各种管道中,我们使用执行自定义代码 script blocks :

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

    如果这个脚本失败,那么整个管道也会失败,这很好。

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

    errors in PR overview page

    即:

    • 一个红色的X图标和消息“1个…所需检查失败”,非常明显,但非常肤浅。
    • 一个红色的X图标和失败检查的名称。与前一个相同,但在复杂的多步骤检查的情况下也不太详细。
    • 消息“集成/”。这实际上有点帮助,但它的风格让我在浏览页面时几乎看不到。
    • 实际的错误消息,与页面的其他部分形成了强烈的对比,实际上是我查看页面时第一件引起我注意的事情。

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

    Bash已退出,代码为“1”。

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

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

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

    很明显,我可以在适当的情况下在脚本块中提供这样的消息,但问题是: 我能以某种方式将此消息显示在PR概述页面的错误摘要中,而不是那个不伦不类的返回代码吗?

    0 回复  |  直到 3 年前
        1
  •  0
  •   Krzysztof Madej    3 年前

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

    请看这里 this reply on SO 。它将允许您将任何标记样式的文本添加到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
    

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

        2
  •  0
  •   F-H    3 年前

    事实上,答案已经是 in another question :

    Logging Commands 是这里的解决方案。写 "##vso[task.logissue type=error;]..." 到stdout将生成您所写的任何内容,而不是 ... 如果这是记录的第一个错误,则显示在错误摘要中。

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

    推荐文章