Mỗi loại sự kiện BEP đều có ngữ nghĩa riêng, được ghi lại tối thiểu trong build_event_stream.proto. Bảng chú giải sau đây mô tả từng loại sự kiện.
Đã hủy
Không giống như các sự kiện khác, Aborted
không có loại mã nhận dạng tương ứng, vì sự kiện Aborted
thay thế các sự kiện thuộc những loại khác. Sự kiện này cho biết bản dựng đã kết thúc sớm và mã sự kiện xuất hiện trong bản dựng không được tạo ra một cách bình thường. Aborted
chứa một enum và nội dung mô tả thân thiện với người dùng để giải thích lý do bản dựng không hoàn tất.
Ví dụ: nếu một bản dựng đang đánh giá một mục tiêu khi người dùng làm gián đoạn Bazel, thì BEP sẽ chứa một sự kiện như sau:
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
ActionExecuted
Cung cấp thông tin chi tiết về việc thực thi một Thao tác cụ thể trong một bản dựng. Theo mặc định, sự kiện này chỉ được đưa vào BEP cho các thao tác không thành công, nhằm hỗ trợ việc xác định nguyên nhân gốc của lỗi bản dựng. Người dùng có thể đặt cờ --build_event_publish_all_actions
để đưa tất cả các sự kiện ActionExecuted
vào.
BuildFinished
Một sự kiện BuildFinished
duy nhất sẽ được gửi sau khi lệnh hoàn tất và bao gồm mã thoát cho lệnh. Sự kiện này cung cấp thông tin chính xác về trạng thái thành công/thất bại.
BuildMetadata
Chứa nội dung đã phân tích cú pháp của cờ --build_metadata
. Sự kiện này tồn tại để hỗ trợ việc tích hợp Bazel với các công cụ khác bằng cách kết nối dữ liệu bên ngoài (chẳng hạn như giá trị nhận dạng).
BuildMetrics
Một sự kiện BuildMetrics
duy nhất được gửi vào cuối mỗi lệnh và bao gồm các bộ đếm/đồng hồ đo hữu ích để định lượng hành vi của công cụ tạo trong lệnh. Các chỉ số này cho biết công việc thực sự đã hoàn thành và không tính công việc đã lưu vào bộ nhớ đệm được dùng lại.
Xin lưu ý rằng memory_metrics
có thể không được điền sẵn nếu không có hoạt động thu gom rác Java nào trong quá trình thực thi lệnh. Người dùng có thể đặt tuỳ chọn --memory_profile=/dev/null
để buộc trình thu gom rác chạy vào cuối lệnh nhằm điền sẵn memory_metrics
.
{
"id": {
"buildMetrics": {}
},
"buildMetrics": {
"actionSummary": {
"actionsExecuted": "1"
},
"memoryMetrics": {},
"targetMetrics": {
"targetsLoaded": "9",
"targetsConfigured": "19"
},
"packageMetrics": {
"packagesLoaded": "5"
},
"timingMetrics": {
"cpuTimeInMs": "1590",
"wallTimeInMs": "359"
}
}
}
BuildStarted
Sự kiện đầu tiên trong luồng BEP, BuildStarted
bao gồm siêu dữ liệu mô tả lệnh trước khi bắt đầu bất kỳ công việc có ý nghĩa nào.
BuildToolLogs
Một sự kiện BuildToolLogs
duy nhất được gửi vào cuối một lệnh, bao gồm cả URI của các tệp do công cụ tạo bản dựng tạo ra. Các tệp này có thể hỗ trợ việc tìm hiểu hoặc gỡ lỗi hành vi của công cụ tạo bản dựng. Một số thông tin có thể được đưa vào cùng dòng.
{
"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 chứa nhiều sự kiện CommandLine
chứa các biểu thị của tất cả các đối số dòng lệnh (bao gồm cả các lựa chọn và đối số chưa được diễn giải).
Mỗi sự kiện CommandLine
đều có một nhãn trong StructuredCommandLineId
cho biết sự kiện đó truyền tải thông tin nào; 3 sự kiện như vậy xuất hiện trong BEP:
"original"
: Dòng lệnh được tạo lại khi Bazel nhận được dòng lệnh đó từ ứng dụng Bazel, không có các lựa chọn khởi động lấy từ tệp .rc."canonical"
: Dòng lệnh hiệu quả với các tệp .rc được mở rộng và chính sách gọi được áp dụng."tool"
: Được điền sẵn từ lựa chọn--experimental_tool_command_line
. Điều này rất hữu ích để truyền đạt dòng lệnh của một công cụ bao bọc Bazel thông qua BEP. Đây có thể là thông báo đệm giao thức nhị phânCommandLine
được mã hoá base64 được dùng trực tiếp hoặc một chuỗi được phân tích cú pháp nhưng không được diễn giải (vì các lựa chọn của công cụ có thể khác với Bazel).
Cấu hình
Sự kiện Configuration
được gửi cho mọi configuration
được dùng trong các mục tiêu cấp cao nhất trong một bản dựng. Luôn có ít nhất một sự kiện cấu hình. id
được các mã sự kiện TargetConfigured
và TargetComplete
sử dụng lại và cần thiết để phân biệt các sự kiện đó trong các bản dựng có nhiều cấu hình.
{
"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
Thử nghiệm. Nếu bạn đặt lựa chọn --experimental_convenience_symlinks_bep_event
, thì các lệnh build
sẽ tạo ra một sự kiện ConvenienceSymlinksIdentified
duy nhất để cho biết cách quản lý các đường liên kết tượng trưng trong không gian làm việc.
Điều này cho phép tạo các công cụ xây dựng gọi Bazel từ xa, sau đó sắp xếp không gian làm việc cục bộ như thể Bazel đã chạy cục bộ.
{
"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"
}
]
}
}
Tìm nạp
Cho biết rằng một thao tác Tìm nạp đã xảy ra trong quá trình thực thi lệnh. Không giống như các sự kiện khác, nếu kết quả tìm nạp được lưu vào bộ nhớ đệm được dùng lại, thì sự kiện này sẽ không xuất hiện trong luồng BEP.
NamedSetOfFiles
Các sự kiện NamedSetOfFiles
báo cáo một cấu trúc khớp với depset
của các tệp được tạo trong quá trình đánh giá lệnh.
Các depsets được đưa vào một cách bắc cầu được xác định bằng NamedSetOfFilesId
.
Để biết thêm thông tin về cách diễn giải các sự kiện NamedSetOfFiles
của một luồng phát trực tiếp, hãy xem trang ví dụ về BEP.
OptionsParsed
Một sự kiện OptionsParsed
duy nhất liệt kê tất cả các lựa chọn được áp dụng cho lệnh, tách các lựa chọn khởi động khỏi các lựa chọn lệnh. Nó cũng bao gồm InvocationPolicy (nếu có).
{
"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
Sự kiện PatternExpanded
cho biết tập hợp tất cả các mục tiêu khớp với các mẫu được cung cấp trên dòng lệnh. Đối với các lệnh thành công, một sự kiện duy nhất sẽ xuất hiện với tất cả các mẫu trong PatternExpandedId
và tất cả các mục tiêu trong các thành phần con của sự kiện PatternExpanded
. Nếu mẫu mở rộng thành bất kỳ test_suite
nào, thì đó là tập hợp các mục tiêu kiểm thử do test_suite
đưa vào. Đối với mỗi mẫu không phân giải được, BEP sẽ chứa một sự kiện Aborted
bổ sung có PatternExpandedId
xác định mẫu.
{
"id": {
"pattern": {
"pattern":["//base:all"]
}
},
"children": [
{"targetConfigured":{"label":"//base:foo"}},
{"targetConfigured":{"label":"//base:foobar"}}
],
"expanded": {
"testSuiteExpansions": {
"suiteLabel": "//base:suite",
"testLabels": "//base:foo_test"
}
}
}
Tiến trình
Các sự kiện tiến trình chứa đầu ra tiêu chuẩn và lỗi tiêu chuẩn do Bazel tạo ra trong quá trình thực thi lệnh. Các sự kiện này cũng được tạo tự động khi cần để thông báo về những sự kiện chưa được thông báo bởi một sự kiện "mẹ" logic (cụ thể là NamedSetOfFiles).
TargetComplete
Đối với mỗi tổ hợp (target, configuration, aspect)
hoàn thành giai đoạn thực thi, một sự kiện TargetComplete
sẽ được đưa vào BEP. Sự kiện này chứa trạng thái thành công/thất bại của mục tiêu và các nhóm đầu ra được yêu cầu của mục tiêu.
{
"id": {
"targetCompleted": {
"label": "//examples/py:bep",
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
}
},
"completed": {
"success": true,
"outputGroup": [
{
"name": "default",
"fileSets": [
{
"id": "0"
}
]
}
]
}
}
TargetConfigured
Đối với mỗi Mục tiêu hoàn tất giai đoạn phân tích, một sự kiện TargetConfigured
sẽ được đưa vào BEP. Đây là nguồn đáng tin cậy cho thuộc tính "loại quy tắc" của mục tiêu. (Các) cấu hình được áp dụng cho mục tiêu sẽ xuất hiện trong các thành phần con được thông báo của sự kiện.
Ví dụ: việc tạo bằng các lựa chọn --experimental_multi_cpu
có thể tạo ra sự kiện TargetConfigured
sau đây cho một mục tiêu duy nhất có 2 cấu hình:
{
"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
Đối với mỗi cặp (target, configuration)
được thực thi, một sự kiện TargetSummary
sẽ được đưa vào cùng với kết quả tổng hợp về mức độ thành công, bao gồm cả quá trình thực thi mục tiêu đã định cấu hình và tất cả các khía cạnh được áp dụng cho mục tiêu đã định cấu hình đó.
TestResult
Nếu bạn yêu cầu kiểm thử, thì sự kiện TestResult
sẽ được gửi cho mỗi lần thử kiểm thử, phân đoạn và lượt chạy cho mỗi kiểm thử. Điều này cho phép người dùng BEP xác định chính xác những thao tác kiểm thử nào không vượt qua kiểm thử và xác định đầu ra kiểm thử (chẳng hạn như nhật ký, tệp test.xml) cho từng thao tác kiểm thử.
TestSummary
Nếu được yêu cầu kiểm thử, sự kiện TestSummary
sẽ được gửi cho mỗi kiểm thử (target,
configuration)
, chứa thông tin cần thiết để diễn giải kết quả của kiểm thử. Số lần thử, phân đoạn và lần chạy cho mỗi bài kiểm thử được đưa vào để cho phép người dùng BEP phân biệt các cấu phần phần mềm theo những phương diện này. Số lần thử và số lần chạy trên mỗi kiểm thử được xem xét trong khi tạo TestStatus
tổng hợp để phân biệt các kiểm thử FLAKY
với các kiểm thử FAILED
.
UnstructuredCommandLine
Không giống như CommandLine, sự kiện này mang các cờ dòng lệnh chưa phân tích cú pháp ở dạng chuỗi mà công cụ tạo gặp phải sau khi mở rộng tất cả các tệp .bazelrc
và xem xét cờ --config
.
Bạn có thể dựa vào sự kiện UnstructuredCommandLine
để tái tạo chính xác một quá trình thực thi lệnh nhất định.
WorkspaceConfig
Một sự kiện WorkspaceConfig
duy nhất chứa thông tin cấu hình liên quan đến không gian làm việc, chẳng hạn như thư mục gốc thực thi.
WorkspaceStatus
Một sự kiện WorkspaceStatus
duy nhất chứa kết quả của lệnh trạng thái không gian làm việc.