任何軟體開發人員都能使用易於採用及擴充的工具,輕鬆建構、測試及封裝任何大小或複雜度的專案。
工程師可能會認為建構作業的基礎知識是理所當然的。軟體開發人員可專注於編寫程式碼的創作過程,因為建構和測試的機械化程序已解決。當使用者為了支援新語言或特殊的機構需求而自訂建構系統時,他們可以專注於自身用途所需的擴充性方面,而無須重新設計基本管線。
工程師可以輕鬆為任何專案做出貢獻。開發人員如要開始處理新專案,只需複製專案並執行建構作業即可。您不需要進行本機設定,有了跨平台遠端執行功能,他們可以在任何地方的任何電腦上工作,並針對專案指定的所有平台完整測試變更。工程師可以快速為新專案設定建構作業,或逐步遷移現有建構作業。
專案可擴充至任何大小的程式碼集和團隊。團隊可以透過快速的增量測試,在提交前全面驗證每項變更。即使是當程式庫增加、專案跨越多個程式庫,以及引入多種語言時,這項原則仍適用。基礎架構不會強迫開發人員為了加快建構速度而犧牲測試涵蓋率。
我們認為 Bazel 有實現這項願景的潛力。
Bazel 是從頭開始建構,可讓建構作業可重現 (給定的輸入集合一律會產生相同的輸出內容) 且可攜式 (建構作業可在任何機器上執行,且不會影響輸出內容)。
這些特性可支援安全的增量功能 (只重建已變更的輸入內容,不會導致資料毀損的風險) 和可分發性 (建構動作是隔離的,可卸載)。透過盡量減少執行正確建構作業所需的工作,並在多個核心和遠端系統中並行執行這些工作,Bazel 可加快任何建構作業的速度。
Bazel 的抽象層是指以簡單的可擴充性語言實作的語言、平台和工具鍊專屬指令,可輕鬆套用至任何情境。
Bazel 核心專長
- Bazel 支援多語言、多平台的建構和測試作業。無論您指定哪種語言和平台組合,都可以執行單一指令來建構及測試整個來源樹狀結構。
- Bazel 建構作業快速且正確。在開發人員的電腦和 CI 上,每個建構和測試執行作業都是逐步進行。
- Bazel 提供統一且可延伸的語言,可為任何語言或平台定義建構作業。
- Bazel 可讓建構作業擴大規模,方法是連線至遠端執行和快取服務。
- Bazel 可在所有主要開發平台 (Linux、macOS 和 Windows) 上運作。
- 我們知道採用 Bazel 需要付出努力,但可以逐步採用。Bazel 會與特定語言/平台的實際標準工具建立連結。
為語言社群提供服務
軟體工程會隨著語言社群的發展而演進,這些社群通常是自發組織的團體,成員會使用常見的工具和做法。
為了讓語言社群成員能夠使用,必須提供可與該社群的工作流程和慣例整合的優質 Bazel 規則。
Bazel 致力於提供可擴充且開放的環境,並支援任何語言的良好規則集。
良好規則集的必要條件
- 規則必須支援該語言的建構和測試作業,包括程式碼涵蓋率。
- 規則需要與該語言廣泛使用的「套件管理工具」介面 (例如 Java 的 Maven),並支援其他廣泛使用的建構系統的漸進式遷移路徑。
- 規則必須遵循「Bazel 三明治」原則,可擴充且可互通。
- 規則必須可供遠端執行。在實際情況中,這表示可使用工具鍊機制進行設定。
- 規則 (和 Bazel) 需要與該語言的廣泛使用的 IDE (如果有) 進行介面連結。
- 規則必須提供完整且實用的說明文件,包括新使用者的入門說明,以及專家使用者的完整說明文件。
這些項目都至關重要,只有將這些項目結合起來,才能發揮 Bazel 在特定生態系統中的專業能力。
這些條件大致上也足夠,一旦全部滿足,Bazel 就能充分為該語言社群的成員提供價值。