建立事件通訊協定詞彙表

回報問題 查看來源 夜間 7.2 7.1 7.0 6.5 6.4

每種 BEP 事件類型都有自己的語意 build_event_stream.proto. 以下詞彙解釋說明各種事件類型。

已取消

與其他事件不同,Aborted 沒有對應的 ID 類型,因為 Aborted 事件會「取代」其他類型的事件。這個事件表示 版本提早終止,且其顯示的事件 ID 並未產生 一般問題。Aborted 包含列舉和容易理解的說明 說明建構失敗的原因

舉例來說,如果使用者中斷 Bazel 時正在評估目標, BEP 包含如下事件:

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

ActionExecuted

這個外掛程式能針對特定的 建構中的 Action。根據預設,這個事件為 僅納入失敗動作的 BEP,以支援找出根本原因 建構失敗的叢集使用者可以設定 --build_event_publish_all_actions 標記 納入所有 ActionExecuted 事件。

BuildFinished

指令執行完畢後,會傳送單一 BuildFinished 事件 包含指令的結束程式碼這個活動提供權威性 。

BuildMetadata

包含 --build_metadata 旗標的剖析內容。這個活動已存在 來插入外部資料 (例如 識別碼)。

BuildMetrics

每個指令的結尾都會傳送單一 BuildMetrics 事件,其中包含 計數器/記錄,有助於量化建構工具在 指令這些指標表示工作已執行完畢,而且不會快取快取數量 定義重複性工作。

請注意,如果沒有 Java 垃圾,可能不會填入 memory_metrics 集合。使用者可以設定 --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 都有一個標籤, 會指明所傳達的表示法有三個這類事件會出現在 BEP:

  • "original":在 Bazel 從 Bazel 接收時,重新建構指令列 沒有來自 .rc 檔案的啟動選項。
  • "canonical":有效的指令列,內含 .rc 檔案,以及 套用了叫用政策。
  • "tool":從 --experimental_tool_command_line 選項填入。這個 很適合用來傳達透過 BEP 包裝 Bazel 的工具指令列。 這可能是採用 Base64 編碼的 CommandLine 二進位通訊協定緩衝區訊息 直接使用,或經過剖析但未解譯的字串 (如 工具提供的選項可能與 Bazel 不同)。

設定

configuration都會傳送 Configuration 事件 用於建構作業中的頂層目標至少有一個設定事件 一律存在id 會由 TargetConfiguredTargetComplete 事件 ID,用來區分這些事件中的事件 多重設定建構

{
  "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 檔案。 遞移納入的 Depset 是由 NamedSetOfFilesId 識別。

如要進一步瞭解如何解讀串流的 NamedSetOfFiles 事件,請參閱 BEP 範例頁面

OptionsParsed

單一 OptionsParsed 事件會列出指令套用的所有選項, 將啟動選項與指令選項區隔開來此 SDK 也包含 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 事件代表符合模式的所有目標組合 提供的 3D 物件如需成功指令,單一事件會顯示在 具有 PatternExpandedId 中的所有模式,以及 PatternExpanded 事件的子項。如果模式展開為 test_suitetest_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) 執行階段,BEP 會包含 TargetComplete 事件。事件包含 目標的成功/失敗情況,以及目標要求的輸出群組。

{
  "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 事件 配置:

{
  "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

如果要求測試,系統會為每個測試 (target, configuration) 傳送 TestSummary 事件,其中包含解讀測試的必要資訊 也就是預測結果每項測試的嘗試次數、資料分割和執行作業數量都包含在內 BEP 取用者來區分這些維度中的構件。嘗試 而每次測試都會在產生匯總 TestStatus 時 區分 FLAKY 測試和 FAILED 測試。

UnstructuredCommandLine

CommandLine 不同,此事件包含未剖析的指令列 建構工具在展開所有標記後遇到的字串形式標記 .bazelrc 檔案和 考慮使用 --config 旗標。

UnstructuredCommandLine 事件可能仰賴於精確地重現一個 任一指令的執行作業

WorkspaceConfig

單一 WorkspaceConfig 事件包含 例如執行根目錄

WorkspaceStatus

單一 WorkspaceStatus 事件包含工作區狀態的結果 指令