每种 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",
"--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”不同,此事件包含未解析的命令行。CommandLine
所有标记
.bazelrc
文件和
考虑使用 --config
标志。
可能会依赖 UnstructuredCommandLine
事件来精确重现
执行指定的命令。
WorkspaceConfig
单个 WorkspaceConfig
事件包含有关
例如执行根。
WorkspaceStatus
单个 WorkspaceStatus
事件包含工作区状态
命令。