Mỗi loại sự kiện BEP đều có ngữ nghĩa riêng, được ghi lại ở mức tối thiểu trong build_event_stream.proto. Bảng thuật ngữ 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
sẽ thay thế các sự kiện thuộc loại khác. Sự kiện này cho biết bản dựng bị chấm dứt sớm và mã sự kiện mà bản dựng xuất hiện không được tạo như bình thường. Aborted
chứa một enum và nội dung mô tả thân thiện với con người để giải thích lý do bản dựng không hoàn chỉnh.
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ề cách thực thi một Hành động cụ thể trong một bản dựng. Theo mặc định, sự kiện này chỉ được đưa vào BEP đối với các hành động không thành công để hỗ trợ việc xác định nguyên nhân gốc gây ra lỗi bản dựng. Người dùng có thể đặt cờ --build_event_publish_all_actions
để bao gồm tất cả các sự kiện ActionExecuted
.
BuildFinished
Hệ thống sẽ gửi một sự kiện BuildFinished
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 đáng tin cậy về thành công/không thành công.
BuildMetadata
Chứa nội dung đã phân tích cú pháp của cờ --build_metadata
. Sự kiện này nhằm hỗ trợ quá trình tích hợp Bazel với các công cụ khác bằng cách sửa ống nước 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 ở cuối mỗi lệnh và bao gồm các bộ đếm/số đo hữu ích cho việc định lượng hành vi của công cụ xây dựng trong lệnh. Các chỉ số này cho biết công việc đã thực sự thực hiện và không tính công việc được lưu vào bộ nhớ đệm được sử dụng lại.
Lưu ý rằng memory_metrics
có thể không được điền sẵn nếu không có thu thập rác Java 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 ở cuối lệnh để đ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
sẽ được gửi ở cuối lệnh, bao gồm cả URI của các tệp do công cụ xây dựng tạo ra, có thể giúp bạn hiểu hoặc gỡ lỗi hành vi của công cụ xây 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 đại diện của tất cả các đối số dòng lệnh (bao gồm cả các tuỳ chọn và đối số chưa 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 nội dung nào; 3 sự kiện như vậy sẽ xuất hiện trong BEP:
"original"
: Đã tạo lại dòng lệnh khi Bazel nhận được từ ứng dụng Bazel mà không có các tuỳ chọn khởi động bắt nguồn từ tệp .rc."canonical"
: Dòng lệnh hiệu quả có tệp .rc được mở rộng và áp dụng chính sách gọi."tool"
: Được điền sẵn từ tuỳ chọn--experimental_tool_command_line
. Điều này rất hữu ích khi truyền tải dòng lệnh của công cụ gói Bazel thông qua BEP. Đây có thể là thông báo trong vùng đệm giao thức nhị phânCommandLine
được mã hoá dưới dạng base64 được sử dụng trực tiếp, hoặc một chuỗi được phân tích cú pháp nhưng không diễn giải (vì các tuỳ chọn của công cụ này có thể khác với tuỳ chọn của Bazel).
Cấu hình
Hệ thống sẽ gửi một sự kiện Configuration
cho mỗi configuration
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. Đây là điều cần thiết để phân biệt các sự kiện đó trong các bản dựng 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 tuỳ chọn --experimental_convenience_symlinks_bep_event
, thì một sự kiện ConvenienceSymlinksIdentified
sẽ do các lệnh build
tạo ra để 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 xây dựng các công cụ gọi Bazel từ xa, sau đó sắp xếp không gian làm việc cục bộ
như thể Bazel được 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 hoạt động 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 đã lưu vào bộ nhớ đệm được sử 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
tệp được tạo trong quá trình đánh giá lệnh.
Các phần phụ thuộc được đưa vào qua trung gian được xác định bởi NamedSetOfFilesId
.
Để biết thêm thông tin về cách diễn giải các sự kiện NamedSetOfFiles
của luồng, hãy xem trang ví dụ về BEP.
OptionsParsed
Một sự kiện OptionsParsed
liệt kê mọi tuỳ chọn được áp dụng cho lệnh, tách các tuỳ chọn khởi động khỏi các tuỳ chọn lệnh. Chính sách này 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ả 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ả mục tiêu trong phần tử con của sự kiện PatternExpanded
. Nếu mẫu mở rộng thành bất kỳ test_suite
nào thì nhóm mục tiêu kiểm thử có trong test_suite
. Đối với mỗi mẫu không phân giải được, BEP chứa thêm một sự kiện Aborted
với 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 độ
Các sự kiện tiến trình chứa đầu ra chuẩn và lỗi 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 các sự kiện chưa được thông báo bằng 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, sự kiện TargetComplete
sẽ được đưa vào BEP. Sự kiện này chứa 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 thành giai đoạn phân tích, một sự kiện TargetConfigured
sẽ được đưa vào BEP. Đây là nguồn có căn cứ đáng tin cho thuộc tính "loại quy tắc" của mục tiêu. (Các) cấu hình áp dụng cho mục tiêu sẽ xuất hiện trong phần tử con được công bố của sự kiện.
Ví dụ: việc tạo bằng các tuỳ chọn --experimental_multi_cpu
có thể tạo ra sự kiện TargetConfigured
sau đây cho một mục tiêu đơn lẻ 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ẽ đi kèm với kết quả thành công tổng hợp, bao gồm quá trình thực thi của mục tiêu đã định cấu hình và tất cả các khía cạnh áp dụng cho mục tiêu đã định cấu hình đó.
TestResult
Nếu có yêu cầu kiểm thử, hệ thống sẽ gửi một sự kiện TestResult
cho mỗi lượt kiểm thử, phân đoạn và chạy cho mỗi lượt kiểm thử. Điều này cho phép thực thể tiêu thụ BEP xác định chính xác hành động kiểm thử nào không thực hiện được quy trình kiểm thử và xác định kết quả kiểm thử (chẳng hạn như nhật ký, tệp test.xml) cho mỗi hành động kiểm thử.
TestSummary
Nếu có yêu cầu kiểm thử, thì một sự kiện TestSummary
sẽ được gửi cho mỗi (target,
configuration)
kiểm thử, chứa thông tin cần thiết để diễn giải kết quả kiểm thử. Số lần thử, phân đoạn và chạy cho mỗi lần kiểm thử được đưa vào để cho phép đối tượng sử dụng BEP phân biệt các cấu phần phần mềm trên các chiều này. Số lần thử và chạy mỗi lần kiểm thử được xem xét trong khi tạo TestStatus
tổng hợp để phân biệt kiểm thử FLAKY
với kiểm thử FAILED
.
UnstructuredCommandLine
Không giống như CommandLine, sự kiện này mang cờ dòng lệnh chưa được phân tích cú pháp ở dạng chuỗi mà công cụ xây dựng gặp phải sau khi mở rộng tất cả các tệp .bazelrc
và xem xét cờ --config
.
Sự kiện UnstructuredCommandLine
có thể được dùng để 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 về trạng thái không gian làm việc.