อภิธานศัพท์เกี่ยวกับโปรโตคอลเหตุการณ์

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

เหตุการณ์ 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 รายการเดียวจะมีผลลัพธ์ของคำสั่งสถานะพื้นที่ทำงาน