เหตุการณ์ 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 ระหว่างการเรียกใช้คําสั่ง ผู้ใช้อาจตั้งค่าตัวเลือก --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
เหตุการณ์นี้แตกต่างจาก CommandLine เนื่องจากมีแฟล็กบรรทัดคำสั่งที่ยังไม่ได้แยกวิเคราะห์ในรูปแบบสตริงตามที่เครื่องมือสร้างพบหลังจากขยายไฟล์ .bazelrc
ทั้งหมดและพิจารณาแฟล็ก --config
ระบบอาจใช้เหตุการณ์ UnstructuredCommandLine
เพื่อจำลองการเรียกใช้คําสั่งหนึ่งๆ ให้เกิดขึ้นอีกครั้งอย่างแม่นยำ
WorkspaceConfig
เหตุการณ์ WorkspaceConfig
รายการเดียวมีข้อมูลการกําหนดค่าเกี่ยวกับเวิร์กสเปซ เช่น รูทการดําเนินการ
WorkspaceStatus
เหตุการณ์ WorkspaceStatus
รายการเดียวจะมีผลลัพธ์ของคำสั่งสถานะพื้นที่ทำงาน