เหตุการณ์ BEP แต่ละประเภทมีความหมายเป็นของตัวเอง ซึ่งมีการบันทึกไว้อย่างคร่าวๆ ใน build_event_stream.proto อภิธานศัพท์ต่อไปนี้อธิบายเหตุการณ์แต่ละประเภท
ล้มเลิกแล้ว
Aborted
ไม่มีประเภทรหัสที่สอดคล้องกัน ซึ่งแตกต่างจากเหตุการณ์อื่นๆ เนื่องจากเหตุการณ์ Aborted
แทนที่เหตุการณ์ประเภทอื่นๆ เหตุการณ์นี้แสดงว่าบิลด์สิ้นสุดลงก่อนกำหนด และรหัสเหตุการณ์ที่ปรากฏไม่ได้ผลิตขึ้นตามปกติ Aborted
มี Enum และคำอธิบายที่ใช้งานกับมนุษย์ได้เพื่ออธิบาย
สาเหตุที่บิลด์ไม่เสร็จสมบูรณ์
เช่น หากบิลด์กำลังประเมินเป้าหมายเมื่อผู้ใช้ขัดจังหวะ Bazel อยู่ BEP จะมีเหตุการณ์ดังต่อไปนี้
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
ActionExecuted
ให้รายละเอียดเกี่ยวกับการดําเนินการการดําเนินการที่เฉพาะเจาะจงในบิลด์ โดยค่าเริ่มต้น เหตุการณ์นี้จะรวมอยู่ใน BEP สำหรับการดำเนินการที่ล้มเหลวเท่านั้น เพื่อสนับสนุนการระบุสาเหตุที่แท้จริงของการสร้างที่ไม่สําเร็จ ผู้ใช้สามารถตั้งค่า Flag --build_event_publish_all_actions
เพื่อรวมเหตุการณ์ ActionExecuted
ทั้งหมด
BuildFinished
ระบบจะส่งเหตุการณ์ BuildFinished
รายการเดียวหลังจากคำสั่งเสร็จสมบูรณ์และรวมรหัสออกของคำสั่ง เหตุการณ์นี้ให้ข้อมูลที่น่าเชื่อถือเกี่ยวกับความสำเร็จ/ความล้มเหลว
BuildMetadata
มีเนื้อหาที่แยกวิเคราะห์แล้วของ Flag --build_metadata
เหตุการณ์นี้มีไว้เพื่อรองรับการผสานรวม Bazel กับเครื่องมืออื่นๆ โดยการต่อท่อข้อมูลภายนอก (เช่น ตัวระบุ)
BuildMetrics
ระบบจะส่งเหตุการณ์ BuildMetrics
รายการเดียวเมื่อสิ้นสุดคําสั่งทุกรายการ และจะมีตัวนับ/มาตรวัดที่มีประโยชน์ในการวัดลักษณะการทํางานของเครื่องมือสร้างในระหว่างคําสั่ง เมตริกเหล่านี้ระบุงานที่ทําจริงและจะไม่นับงานที่แคชไว้แล้วซึ่งนํามาใช้ซ้ำ
โปรดทราบว่าระบบอาจไม่ป้อนข้อมูล memory_metrics
หากไม่มีคอลเล็กชัน Java garbage ระหว่างการดำเนินการของคำสั่ง ผู้ใช้อาจตั้งค่าตัวเลือก --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
ที่บ่งบอกถึงการแสดงผลที่ส่งผ่าน เหตุการณ์ดังกล่าว 3 รายการจะปรากฏใน BEP ดังนี้
"original"
: บรรทัดคำสั่งที่สร้างขึ้นใหม่ตามที่ Bazel ได้รับจากไคลเอ็นต์ Bazel โดยไม่มีตัวเลือกการเริ่มต้นที่มาจากไฟล์ .rc"canonical"
: บรรทัดคำสั่งที่มีประสิทธิภาพซึ่งมีไฟล์ .rc ที่ขยายและนโยบายการเรียกใช้"tool"
: ดึงข้อมูลมาจากตัวเลือก--experimental_tool_command_line
วิธีนี้เป็นประโยชน์ในการสื่อบรรทัดคำสั่งของเครื่องมือที่ใช้ห่อ Bazel ผ่าน BEP ซึ่งอาจเป็นข้อความบัฟเฟอร์โปรโตคอลไบนารีCommandLine
ที่เข้ารหัสแบบ Base64 ซึ่งใช้โดยตรง หรือสตริงที่ถูกแยกวิเคราะห์แต่ไม่ได้ตีความ (เนื่องจากตัวเลือกของเครื่องมืออาจแตกต่างจาก Bazel)
การกำหนดค่า
ระบบจะส่งเหตุการณ์ Configuration
สําหรับ configuration
ทั้งหมดที่ใช้ในเป้าหมายระดับบนสุดในบิลด์ ต้องมีเหตุการณ์การกําหนดค่าอย่างน้อย 1 รายการเสมอ id
จะถูกนําไปใช้ซ้ำโดยรหัสเหตุการณ์ TargetConfigured
และ TargetComplete
และจําเป็นต่อการแยกแยะเหตุการณ์เหล่านั้นในบิลด์การกําหนดค่าหลายรายการ
{
"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)
แต่ละชุดที่ทํางานเสร็จสมบูรณ์แล้ว เหตุการณ์ TargetComplete
จะรวมอยู่ใน BEP เหตุการณ์ประกอบด้วยการทํางานสำเร็จ/ไม่สําเร็จของเป้าหมายและกลุ่มเอาต์พุตที่ขอของเป้าหมาย
{
"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
ต่อไปนี้สําหรับเป้าหมายเดียวที่มีการกําหนดค่า 2 รายการ
{
"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
หากต้องขอทดสอบ ระบบจะส่งเหตุการณ์ TestSummary
สำหรับการทดสอบ (target,
configuration)
แต่ละครั้ง โดยมีข้อมูลที่จำเป็นในการตีความผลการทดสอบ ระบบรวมจำนวนครั้งที่พยายาม ชาร์ด และการเรียกใช้ต่อการทดสอบ เพื่อให้ผู้บริโภคของ BEP แยกความแตกต่างของอาร์ติแฟกต์ในมิติข้อมูลเหล่านี้ได้ ระบบจะพิจารณาจำนวนครั้งที่พยายามและจำนวนครั้งที่เรียกใช้ต่อการทดสอบขณะสร้างTestStatus
รวมเพื่อแยกความแตกต่างระหว่างการทดสอบ FLAKY
กับการทดสอบ FAILED
UnstructuredCommandLine
เหตุการณ์นี้จะใช้แฟล็กบรรทัดคำสั่งที่ไม่ได้แยกวิเคราะห์ในรูปแบบสตริงที่เครื่องมือสร้างพบหลังจากขยายไฟล์ .bazelrc
ทั้งหมดและพิจารณา Flag --config
ซึ่งแตกต่างจาก CommandLine
ระบบอาจใช้เหตุการณ์ UnstructuredCommandLine
เพื่อจำลองการเรียกใช้คําสั่งหนึ่งๆ ให้เกิดขึ้นอีกครั้งอย่างแม่นยำ
WorkspaceConfig
เหตุการณ์ WorkspaceConfig
รายการเดียวมีข้อมูลการกําหนดค่าเกี่ยวกับเวิร์กสเปซ เช่น รูทการดําเนินการ
WorkspaceStatus
เหตุการณ์ WorkspaceStatus
รายการเดียวจะมีผลลัพธ์ของคำสั่งสถานะพื้นที่ทำงาน