Build Event Protocol 术语表

<ph type="x-smartling-placeholder"></ph> 报告问题 <ph type="x-smartling-placeholder"></ph> 查看来源 每晚 · 7.2 条 · 7.1敬上 · 7.0 · 6.5 · 6.4

每种 BEP 事件类型都有自己的语义,至少在 build_event_stream.proto. 以下术语表介绍了每种事件类型。

已中止

与其他事件不同,Aborted 没有对应的 ID 类型, Aborted 事件会替换其他类型的事件。此事件表明 构建提前终止,且其显示的事件 ID 未生成 。Aborted 包含枚举和易于理解的说明 构建未完成的原因。

例如,如果构建要在用户中断 Bazel 时评估目标, BEP 包含如下事件:

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

ActionExecuted

提供有关特定 API 密钥的 build 中的 Action。默认情况下,此事件为 仅针对失败的操作纳入 BEP,以帮助确定根本原因 构建失败用户可以设置 --build_event_publish_all_actions 标志 以包含所有 ActionExecuted 事件。

BuildFinished

命令完成后,系统会发送单个 BuildFinished 事件, 包含命令的退出代码。此事件提供权威性 成功/失败信息。

BuildMetadata

包含 --build_metadata 标志的已解析内容。此活动已存在 通过管道获取外部数据(例如 标识符)。

BuildMetrics

系统会在每个命令结束时发送单个 BuildMetrics 事件,其中包含 计数器/量表,对于量化构建工具在 命令。这些指标表示实际完成的工作,不计入缓存内容 资源。

请注意,如果没有 Java 垃圾回收,系统可能不会填充 memory_metrics 收集其数据用户可以设置 --memory_profile=/dev/null 选项,用于强制垃圾回收 收集器在命令结束时运行,以填充 memory_metrics

{
  "id": {
    "buildMetrics": {}
  },
  "buildMetrics": {
    "actionSummary": {
      "actionsExecuted": "1"
    },
    "memoryMetrics": {},
    "targetMetrics": {
      "targetsLoaded": "9",
      "targetsConfigured": "19"
    },
    "packageMetrics": {
      "packagesLoaded": "5"
    },
    "timingMetrics": {
      "cpuTimeInMs": "1590",
      "wallTimeInMs": "359"
    }
  }
}

BuildStarted

BEP 视频流中的第一个事件,BuildStarted 包含描述 命令。

BuildToolLogs

系统会在命令结束时发送单个 BuildToolLogs 事件,包括 URI 可能有助于理解或调试的 构建工具行为。部分信息可能会以内嵌方式包含在内。

{
  "id": {
    "buildToolLogs": {}
  },
  "lastMessage": true,
  "buildToolLogs": {
    "log": [
      {
        "name": "elapsed time",
        "contents": "MC4xMjEwMDA="
      },
      {
        "name": "process stats",
        "contents": "MSBwcm9jZXNzOiAxIGludGVybmFsLg=="
      },
      {
        "name": "command.profile.gz",
        "uri": "file:///tmp/.cache/bazel/_bazel_foo/cde87985ad0bfef34eacae575224b8d1/command.profile.gz"
      }
    ]
  }
}

CommandLine

BEP 包含多个 CommandLine 事件,其中包含所有 命令行参数(包括选项和未解释的参数)。 每个 CommandLine 事件的 StructuredCommandLineId 中都有一个标签, 指明它所传达的呈现形式;BEP 中出现三种此类事件:

  • "original":将命令行重建为 Bazel 从 Bazel 接收的命令行 不包含来自 .rc 文件的启动选项。
  • "canonical":包含已扩展和 .rc 文件的有效命令行 调用政策。
  • "tool":通过 --experimental_tool_command_line 选项填充。这个 有助于传达通过 BEP 封装 Bazel 的工具的命令行。 此消息可以是采用 base64 编码的 CommandLine 二进制协议缓冲区消息 直接使用的字符串,或者经过解析但未解译的字符串(如 该工具的选项可能与 Bazel 的选项不同)。

配置

系统针对每个 configuration 发送一个 Configuration 事件 在 build 的顶级目标中使用的名称。至少有一个配置事件 始终存在。id 会被 TargetConfigured 重复使用,并且 TargetComplete 个事件 ID,在 多配置构建

{
  "id": {
    "configuration": {
      "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
    }
  },
  "configuration": {
    "mnemonic": "k8-fastbuild",
    "platformName": "k8",
    "cpu": "k8",
    "makeVariable": {
      "COMPILATION_MODE": "fastbuild",
      "TARGET_CPU": "k8",
      "GENDIR": "bazel-out/k8-fastbuild/bin",
      "BINDIR": "bazel-out/k8-fastbuild/bin"
    }
  }
}

ConvenienceSymlinksIdentified

实验性 - 如果 --experimental_convenience_symlinks_bep_event 则系统会生成一个 ConvenienceSymlinksIdentified 事件, build 命令,用于指示应如何管理工作区中的符号链接。 这使您可以构建远程调用 Bazel,然后安排本地 就像在本地运行 Bazel 一样。

{
  "id": {
    "convenienceSymlinksIdentified":{}
  },
  "convenienceSymlinksIdentified": {
    "convenienceSymlinks": [
      {
        "path": "bazel-bin",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/bin"
      },
      {
        "path": "bazel-genfiles",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/genfiles"
      },
      {
        "path": "bazel-out",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out"
      }
    ]
  }
}

提取

表示提取操作是命令执行过程的一部分。 与其他事件不同,如果重复使用缓存的提取结果,此事件不会 在 BEP 视频流中出现。

NamedSetOfFiles

NamedSetOfFiles 个事件报告了符合以下过滤条件的结构 命令评估期间生成的文件占 depset。 传递性包含的废弃设置由 NamedSetOfFilesId 进行标识。

如需详细了解如何解读数据流的 NamedSetOfFiles 事件,请参阅 BEP 示例页面

OptionsParsed

单个 OptionsParsed 事件会列出应用于该命令的所有选项, 将启动选项与命令选项分开。它还包含 InvocationPolicy(如果有)。

{
  "id": {
    "optionsParsed": {}
  },
  "optionsParsed": {
    "startupOptions": [
      "--max_idle_secs=10800",
      "--noshutdown_on_low_sys_mem",
      "--connect_timeout_secs=30",
      "--output_user_root=/tmp/.cache/bazel/_bazel_foo",
      "--output_base=/tmp/.cache/bazel/_bazel_foo/a61fd0fbee3f9d6c1e30d54b68655d35",
      "--deep_execroot",
      "--expand_configs_in_place",
      "--idle_server_tasks",
      "--write_command_log",
      "--nowatchfs",
      "--nofatal_event_bus_exceptions",
      "--nowindows_enable_symlinks",
      "--noclient_debug",
    ],
    "cmdLine": [
      "--enable_platform_specific_config",
      "--build_event_json_file=/tmp/bep.json"
    ],
    "explicitCmdLine": [
      "--build_event_json_file=/tmp/bep.json"
    ],
    "invocationPolicy": {}
  }
}

PatternExpanded

PatternExpanded 事件表示与模式匹配的所有目标的集合 提供的对象。如果命令成功,则会出现单个事件 PatternExpandedId 中的所有模式,以及 PatternExpanded 事件的子级。如果解锁图案扩展为 test_suite 表示 test_suite 包含的一组测试目标。对于每个 格式,BEP 包含额外的 Aborted 事件,其中 PatternExpandedId 用于标识模式。

{
  "id": {
    "pattern": {
      "pattern":["//base:all"]
    }
  },
  "children": [
    {"targetConfigured":{"label":"//base:foo"}},
    {"targetConfigured":{"label":"//base:foobar"}}
  ],
  "expanded": {
    "testSuiteExpansions": {
      "suiteLabel": "//base:suite",
      "testLabels": "//base:foo_test"
    }
  }
}

进度

进度事件包含 Bazel 生成的标准输出和标准错误 运行容器系统也会根据需要自动生成这些事件 用于公告逻辑“父级”尚未公布的活动事件(在 特别是 NamedSetOfFiles)。

TargetComplete

对于完成以下任务的每个 (target, configuration, aspect) 组合: 则 BEP 中会包含 TargetComplete 事件。该事件包含 目标成功/失败情况以及目标请求的输出组。

{
  "id": {
    "targetCompleted": {
      "label": "//examples/py:bep",
      "configuration": {
        "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
      }
    }
  },
  "completed": {
    "success": true,
    "outputGroup": [
      {
        "name": "default",
        "fileSets": [
          {
            "id": "0"
          }
        ]
      }
    ]
  }
}

TargetConfigured

对于每个完成分析阶段的目标,系统会记录一次 TargetConfigured 事件 包括在 BEP 中。这是目标“规则种类”的权威来源 属性。应用于目标的配置将显示在公布的 子级

例如,使用 --experimental_multi_cpu 选项进行构建可能会产生 以下 TargetConfigured 事件针对具有两个目标的单个目标 配置:

{
  "id": {
    "targetConfigured": {
      "label": "//starlark_configurations/multi_arch_binary:foo"
    }
  },
  "children": [
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "c62b30c8ab7b9fc51a05848af9276529842a11a7655c71327ade26d7c894c818"
        }
      }
    },
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "eae0379b65abce68d54e0924c0ebcbf3d3df26c6e84ef7b2be51e8dc5b513c99"
        }
      }
    }
  ],
  "configured": {
    "targetKind": "foo_binary rule"
  }
}

TargetSummary

对于执行的每个 (target, configuration) 对,都有一个 TargetSummary 事件以及包含所配置的 目标的执行情况以及应用于该配置目标的所有方面。

TestResult

如果请求进行测试,则系统会针对每次测试尝试发送 TestResult 事件。 每次测试运行一次。这样,BEP 消费者就可以精确地识别 测试操作未通过测试,并找出测试输出(例如日志、 test.xml 文件)。

TestSummary

如果请求测试,则系统会为每个测试 (target, configuration) 发送一个 TestSummary 事件,其中包含解读测试 结果。纳入了每个测试的尝试次数、分片次数和运行次数,以便启用 BEP 使用者在这些维度上区分伪影。尝试次数 和每次测试的运行次数在生成汇总 TestStatus 到 区分 FLAKY 测试与 FAILED 测试。

UnstructuredCommandLine

CommandLine不同,此事件包含未解析的命令行 所有标记 .bazelrc 文件和 考虑使用 --config 标志。

可能会依赖 UnstructuredCommandLine 事件来精确重现 执行指定的命令。

WorkspaceConfig

单个 WorkspaceConfig 事件包含有关 例如执行根。

WorkspaceStatus

单个 WorkspaceStatus 事件包含工作区状态 命令