建構事件通訊協定

回報問題 查看原始碼 夜間 7.2 7.1 7.0 6.5 6.4

建構事件 通訊協定 (BEP) 可讓第三方程式取得 Bazel 叫用的深入分析資訊。適用對象 例如,您可以使用 BEP 收集 IDE 的資訊 外掛程式或顯示建構結果的資訊主頁。

通訊協定是一組通訊協定 緩衝區訊息 語意。包含建構和測試的相關資訊 結果、建構進度、建構設定等等。BEP 是 目的在於以程式輔助方式使用,並讓系統剖析 Bazel 的 指令列輸出內容

「建構事件通訊協定」是以事件形式呈現建構的相關資訊。A 罩杯 建構事件是通訊協定緩衝區訊息,由建構事件 ID 一組子事件 ID 和酬載。

  • 建構事件 ID:視建構事件的種類而定,這可能是 不透明 字串結構化 資訊 畫面上就會顯示建構事件的詳細資訊建構事件 ID 在 建構容器

  • 子項:建構事件可公告其他建構事件,方法是加入 在其子項的建構事件 ID 欄位。 舉例來說,PatternExpanded 建構事件會宣告其展開的目標 先是小孩通訊協定可保證除了第一個事件 則會在先前的事件中公告

  • 酬載:酬載包含建構事件的相關結構化資訊。 編碼為該事件特有的通訊協定緩衝區訊息。請注意, 酬載可能不是預期的類型,但可能是 Aborted 訊息 如果版本提早取消

建構事件圖表

所有建構事件都會透過父項和子項形成有向非循環圖 關係除了初始建構事件以外,每個建構事件都有一個或 父項事件。請注意,並非所有子事件的父項事件都必須 事先張貼的訊息建構作業完成時 (成功或失敗) 所有宣布的活動都會發布。當 Bazel 當機或失敗 網路傳輸,部分宣布的建構事件可能永遠不會張貼。

事件圖表的結構反映了指令的生命週期。每 BEP 圖表的特性如下:

  1. 根事件一律為 BuildStarted 活動。所有其他事件皆為其子系。
  2. BuildStarted 事件的立即子項含有 指令
  3. 含有指令產生的資料的事件,例如建構及測試的檔案 結果,放置在 BuildFinished 之前 活動。
  4. 系統可能會追蹤 BuildFinished 事件 ,方法是針對包含建構相關摘要資訊的事件 (例如指標 執行這些作業

使用建構事件通訊協定

以二進位格式使用

如要以二進位格式使用 BEP:

  1. 讓 Bazel 指定 選項 --build_event_binary_file=/path/to/file。這個檔案會包含 序列化通訊協定緩衝區訊息,每個訊息都以長度分隔。 每封郵件都會加上其長度,並編碼為可變長度整數。 使用通訊協定緩衝區程式庫的 parseDelimitedFrom(InputStream) 方法。

  2. 然後編寫程式,從 經過序列化的通訊協定緩衝區訊息

以文字或 JSON 格式使用

以下 Bazel 指令列標記會在 人類可讀的格式,例如文字和 JSON:

--build_event_text_file
--build_event_json_file

建構事件服務

建構事件 服務 Protocol 是通用的 gRPC 服務,可用來發布建構事件。建構事件 服務通訊協定與 BEP 不同,並且會將 BEP 事件視為不透明位元組。 Bazel 準備了 Build Event Service 通訊協定的 gRPC 用戶端實作, 會發布「Build Event Protocol」事件。其中一個 SDK 可以指定要 以便使用 --bes_backend=HOST:PORT 旗標觸發事件如果後端使用 gRPC 您必須在位址前面加上適當配置:grpc:// 代表明文 gRPC 和 grpcs:// 適用於已啟用 TLS 的 gRPC。

建構事件服務旗標

Bazel 有多個與 Build Event Service 通訊協定相關的標記,包括:

  • --bes_backend
  • --[no]bes_best_effort
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --project_id

如需每個標記的說明,請參閱 指令列參考資料

驗證與安全性

Bazel 的 Build Event 服務實作也支援驗證和傳輸層安全標準 (TLS)。 您可以使用下列旗標控管這些設定。請注意 標記也會用於 Bazel 的 Remote Execution。這表示該版本 事件服務和 Remote 執行端點必須共用 驗證和傳輸層安全標準 (TLS) 基礎架構

  • --[no]google_default_credentials
  • --google_credentials
  • --google_auth_scopes
  • --tls_certificate
  • --[no]tls_enabled

如需每個標記的說明,請參閱 指令列參考資料

建構事件服務和遠端快取

BEP 通常包含許多記錄檔 (test.log、test.xml、 等)。遠端 BES 伺服器 因為這些檔案位於不同的電腦上,所以通常無法存取。如要 要解決這個問題,就必須將 Bazel 與 remote 快取。 Bazel 會將所有輸出檔案上傳到遠端快取 (包括檔案) BEP 中參照的檔案),且 BES 伺服器便可擷取參照檔案。 從快取中取得

請參閱 GitHub 問題 3689,瞭解 瞭解詳情