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

รายงานปัญหา ดูแหล่งที่มา รุ่นรายวัน · 8.0 · 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 ระหว่างการเรียกใช้คําสั่ง ผู้ใช้อาจตั้งค่าตัวเลือก --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",
      "--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

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