用戶端/伺服器實作

Bazel 系統是以長期伺服器程序實作, 這可讓以批次實作的實作執行許多最佳化作業,例如將 BUILD 檔案、依附元件圖表和其他建構版本之間的中繼資料儲存在下一個建構中。這麼做能改善增量建構作業的速度,並允許 buildquery 等不同指令共用已載入套件的相同快取,以便加快查詢速度。

執行 bazel 時,你是執行用戶端。用戶端會根據輸出基準尋找伺服器。根據預設,系統會依據基礎工作區目錄的路徑和使用者 ID 來判斷伺服器的運作情況,如果您在多個工作區內工作,就會有多個輸出基礎,因此有多個 Bazel 伺服器程序。同一工作站的多位使用者可能會在同一個工作區中同時建構,因為輸出基礎會產生不同的 (不同的使用者 ID)。如果用戶端找不到執行中的伺服器執行個體,就會啟動新的執行個體。伺服器在閒置一段時間後就會停止 (預設為 3 小時,但可以使用啟動選項 --max_idle_secs 來修改這項設定)。

大部分情況下,使用者不會看見執行中的伺服器,但有時也會記住這一點。舉例來說,如果您執行指令碼會在不同的目錄中執行大量自動化建構作業,請務必確保您不會佔用大量閒置伺服器。方法很簡單,您只要使用看完再關閉電源,或指定縮短逾時期限即可。

Bazel 伺服器程序的名稱會以 bazel(dirname) 的形式顯示在 ps xps -e f 的輸出內容中,其中 dirname 是包含工作區的根目錄 例如:

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

方便您找出屬於特定工作區的伺服器。(請注意,在使用 ps 的某些特定選項時,Bazel 伺服器程序的名稱可能會以 java 命名)。只要使用 off 指令即可停止 Bazel 伺服器。

執行 bazel 時,用戶端會先檢查伺服器是否是適當的版本;如果沒有,則伺服器就會停止並啟動新的伺服器。這可確保使用長時間執行的伺服器程序不會幹擾到適當的版本。