【问题标题】:How to get the output of Buildkite job run through the Buildkite REST API如何通过 Buildkite REST API 获取 Buildkite 作业的输出
【发布时间】:2019-07-01 06:18:11
【问题描述】:

我有一个 Buildkite 管道:sample,用于在我的应用程序上运行单元测试:sampleapp

在 Buildkite 应用程序中,我设置了一个作业 - Unit Test,它实际上通过脚本运行单元测试:unittest.sh

该脚本的输出(以日志的形式)在 Buildkite UI 中可用如果我打开构建页面:https://www.buildkite.com/org/sample/builds/buildNumber 并单击单元测试部分。输出是脚本运行日志的形式,最后它指定单元运行的结果,格式如下:

[16:17:02]: ▸ Test Succeeded
+--------------------+-----+
|       Test Results       |
+--------------------+-----+
| Number of tests    | 773 |
| Number of failures | 0   |
+--------------------+-----+

现在,我有一个客户端,它通过端点 https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds 调用 BuildKite REST API,它以 JSON 格式返回所有构建的列表。例如,每个构建都有大量数据(数据的一个子集):

[
  {
    "id": "xyz",
    "url": "xyz",
    "number": 1,
    "creator": {...},
    "pipeline:" {...},
    "jobs": [
      {
        "id": "abc",
        "type": "script",
        "name": "Unit Test",
        "command": "sh .buildkite/unittest.sh",
        "log_url": "https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds/1/jobs/12oidna-3e1n-f3fsa2/log",
        "raw_log_url": "https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds/1/jobs/12oidna-3e1n-f3fsa2/log.txt",
        "artifacts_url": "https://api.buildkite.com/v2/org/sampleapp/pipelines/sample/builds/1/jobs/12oidna-3e1n-f3fsa2/artifacts"
      }
    ]
  }
]

但是,这个 JSON 响应没有关于 unittest.sh 脚本日志中报告的测试结果的信息(即测试数量、通过的测试等)。

客户端还需要在调用 REST API 时以某种方式访问​​构建结果。

一种方法是让客户端首先获取构建 JSON 响应以及每个构建的响应,获取日志(如 JSON 响应的 log_url 部分中指定的那样)然后解析它们(不知何故? ) 提取单元测试通过/失败结果。

但是,这需要很长时间,因为每个响应有 30 个构建,并且 日志文件非常大,因此下载和解析单个日志文件需要一些时间。

这里的另一个挑战是处理单元测试运行本身存在一些问题并且文件末尾没有报告测试结果编号但报告了一些错误的情况。

我想知道是否有更好的方法来做到这一点?也许通过使用 web-hooks 来解析 Buildkite 本身的数据,然后以某种方式将其发送到客户端上的接收端点。

但是,我不知道从哪里开始以及如何做到这一点.. 有人可以帮我做这件事,或者至少为我指明正确的方向吗?

【问题讨论】:

    标签: json rest unit-testing webhooks buildkite


    【解决方案1】:

    您可以通过 REST API 访问任何作业的日志输出:

    https://buildkite.com/docs/apis/rest-api/jobs#get-a-jobs-log-output

    大多数测试运行器还能够将结果输出为 json 或 xml 文件。如果您能找到这样的选项,那么您可以将测试结果更丰富地存储为工件:

    https://buildkite.com/docs/pipelines/artifacts

    您甚至可以使用此文件将测试结果摘要作为注释上传:

    https://buildkite.com/docs/agent/v3/cli-annotate

    【讨论】:

      猜你喜欢
      • 2019-11-13
      • 2020-05-16
      • 2017-06-22
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 2016-03-17
      • 2019-07-28
      • 2018-04-15
      相关资源
      最近更新 更多