透過指令碼呼叫 Bazel

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

您可以從指令碼呼叫 Bazel,以執行建構、執行測試或查詢 依附元件圖Bazel 的設計宗旨就是要能有效執行指令碼,但 本節將列舉一些注意事項,確保指令碼更豐富 穩健成長

選擇輸出基準

--output_base 選項可控制 Bazel 程序應在何處寫入 以及應用程式內部使用的各種工作檔案 Bazel,其中一種是鎖定 Pod 的並行變動 由多個 Bazel 程序產生輸出基礎

要為指令碼選擇正確的輸出基礎目錄取決於多種因素 。如果需要將建構輸出內容放在特定位置, 決定所需的輸出內容基礎如果您要以「唯讀」方式通話 Bazel (例如 bazel query),鎖定因素更為重要。於 特別是需要同時執行多個指令碼執行個體時。 請務必注意,每個 Blaze 伺服器程序最多只能處理一個 「每次」叫用。 視實際情況而定,各個指令碼執行個體可能適合你 等待轉彎,或者使用 --output_base 執行多個 並使用 Blaze 伺服器。

如果使用預設的輸出基本值,您將競爭相同的 使用者的互動式 Bazel 指令使用的鎖定。如果使用者在發生問題時 因此指令碼必須等待執行 才能繼續操作。

伺服器模式註意事項

根據預設,Bazel 會使用長時間執行的「伺服器程序」做為 最佳化在指令碼中執行 Bazel 時,別忘了呼叫 shutdown 使用完伺服器後,請指定 --max_idle_secs=5 閒置的伺服器會迅速關機。

我會收到哪個結束代碼?

Bazel 會嘗試區分失敗原因 也會考量導致 Bazel 無法正確執行的外部錯誤。 Bazel 執行作業可能會導致下列結束代碼:

結束代碼適用於所有指令:

  • 0 - 成功
  • 2 - 指令列問題、錯誤或非法的旗標或指令組合,或 錯誤的環境變數。您必須修改指令列。
  • 8 - 建構中斷,但我們已實際終止服務。
  • 9 - 保留伺服器鎖定,且通過了 --noblock_for_lock
  • 32 - 這部機器上沒有外部環境發生錯誤。

  • 33 - Bazel 記憶體不足,因此當機。您必須修改指令列。

  • 34 - 僅供 Google 內部使用。

  • 35 - 僅供 Google 內部使用。

  • 36 - 地方環境問題,疑似永久存在。

  • 37 - 無法處理的例外狀況 / 內部 Bazel 錯誤。

  • 38 - 將結果發布至建構事件服務時發生暫時性錯誤。

  • 39:系統會從遠端快取中移除 Bazel 所需的 Blob。

  • 41-44 - 僅供 Google 內部使用。

  • 45:將結果發布至建構事件服務時發生持續性錯誤。

  • 47 - 僅供 Google 內部使用。

  • 49 - 僅供 Google 內部使用。

傳回指令 bazel buildbazel test 的代碼:

  • 1 - 建構失敗。
  • 3 - 建構順利,但部分測試失敗或逾時。
  • 4 - 建構成功,但即使測試前並未找到測試 。

bazel run

  • 1 - 建構失敗。
  • 如果建構成功,但執行的子程序會傳回非零的結束事件 將是指令的結束代碼

bazel query

  • 3 - 部分成功,但查詢在 輸入 BUILD 檔案集,因此作業結果並非 100% 可靠又可靠的方式原因可能是指令列上的 --keep_going 選項。
  • 7 - 指令失敗。

日後的 Bazel 版本可能會新增其他結束代碼,取代一般的失敗情形 結束代碼 1 具有特定含意的不同非零值。 不過,所有非零的離開值一律都會構成錯誤。

讀取 .bazelrc 檔案

根據預設,Bazel 會從基礎指令讀取 .bazelrc 檔案 工作區目錄或使用者的主目錄說明 即可選擇合適的腳本當你的指令碼設計要完美融合時 例如建立發布子版本時,您應停用讀取 .bazelrc 檔案。--bazelrc=/dev/null。如果要在模型中 使用使用者偏好的設定進行建構,預設行為較佳。

指令記錄

您也可以在指令記錄檔中找到 Bazel 輸出內容 以下指令:

bazel info command_log

指令記錄檔中包含 最新的 Bazel 指令請注意,執行 bazel info 會覆寫 內容,因為之後它就會成為最新的 Bazel 指令。 不過,除非您變更設定,否則指令記錄檔的位置不會改變 --output_base--output_user_root 選項的設定

剖析輸出內容

Bazel 輸出內容很容易剖析,以因應多種用途。以下提供兩個選項 對指令碼而言,--noshow_progress 會抑制進度 訊息和 --show_result n,可控制 而不是「打造最新」列印的訊息;這些訊息可能會剖析為 找出成功建構的目標和輸出內容位置 檔案。如需使用,請務必指定極大的 n 值 這些訊息。

分析效能疑難排解

請參閱「效能分析」一節。