透過指令碼呼叫 Bazel

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

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

選擇輸出基準

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

要為指令碼選擇正確的輸出基礎目錄取決於多種因素 。如果需要將建構輸出內容放在特定位置, 決定所需的輸出內容基礎如果您要以「唯讀」方式撥號給 Bazel (例如 bazel query),鎖定因素更為重要。於 特別是需要同時執行多個指令碼執行個體時。 您就需要為每個廣告提供不同的 (或隨機) 輸出基準。

如果使用預設的輸出基本值,您將競爭相同的 使用者的互動式 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 - 僅供 Google 內部使用。

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

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

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

  • 47 - 僅供 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 值 這些訊息。

分析效能疑難排解

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