Bazel Vision

任何軟體開發人員都能使用容易採用和擴充的工具,有效建構、測試及封裝任何大小或複雜度的專案。

  • 工程師可以讓建構系統自行處理某些工作。軟體開發人員撰寫程式碼時,應該專心發揮創意,把建構和測試的機械化步驟交由工具代勞。自訂建構系統來支援新語言、或滿足組織的個別需求時,也只需專注在特定用途的擴充功能,不必重新設計基本架構。

  • 工程師可以輕鬆參與任何專案。開發人員如要開始處理新專案,只要複製專案並執行建構即可,不需進行本機設定就能作業。運用跨平台遠端執行,不但能擺脫地點與機器限制,還能針對專案指定的所有平台,全面測試變更。此外,工程師可以快速設定新專案版本,或逐步遷移現有版本。

  • 專案可根據程式碼集和團隊規模調整大小。快速的增量測試可讓團隊在提交變更前,充分驗證每項變更。即使存放區變大、專案涵蓋多個存放區,以及導入多種語言,這個原則依然適用。基礎架構不會迫使開發人員為了建構速度而犧牲測試涵蓋範圍。

我們相信 Bazel 有潛力實現這個願景。

Bazel 是從無到有打造出來的工具,用來執行下列兩種特質的建構作業:可重現 (一組輸入內容一律產生相同的輸出內容) 及可攜式 (建構作業可在任何機器執行,不影響輸出內容)。

這些特性支援安全增量 (只重建變更的輸入內容不會造成損毀風險) 和可分配性 (建構動作為個別執行,且可供卸載)。Bazel 可減少建構正確版本所需的工作,並於多個核心和遠端系統中平行處理,因此能快速進行版本建構。

Bazel 的抽象層是以簡單的擴充性語言實作的語言、平台和工具鏈專屬指令,可輕鬆套用至任何環境。

Bazel 核心能力

  1. Bazel 支援以多語言、多平台建構和測試。無論您想指定哪種語言和平台組合,都可以執行單一指令來建構及測試整個來源樹狀結構。
  2. 用 Bazel 建構既快速又正確。無論是在開發人員的電腦還是 CI 主分支,每次版本建構和測試都會採取增量形式。
  3. Bazel 提供統一且可擴充的語言,可定義任何語言或平台的版本建構。
  4. Bazel 可連線至遠端執行和快取服務,調整建構規模。
  5. Bazel 適用於所有主要開發平台 (Linux、MacOS 和 Windows)。
  6. 我們瞭解全面採用 Bazel 可能是個大工程,但您可以考慮逐步採用,其可與特定語言或平台的實際標準工具介接。

服務語言社群

軟體工程是在語言社群的背景下演進,通常是使用共同工具和做法的自組群體。

如要為語言社群成員提供實用工具,必須提供高品質的 Bazel 規則,並與該社群的工作流程和慣例整合。

Bazel 致力於擴充性和開放性,並支援任何語言的良好規則集。

良好規則集的相關規定

  1. 這些規則必須支援語言的有效建構和測試,包括程式碼涵蓋率。
  2. 規則需要與語言的常用「套件管理工具」介接 (例如 Java 的 Maven),並支援從其他常用建構系統增量遷移。
  3. 規則必須可擴充及可互通,並遵循「Bazel sandwich」原則。
  4. 規則必須可供遠端執行。在實務上,這表示可使用工具鏈機制設定
  5. 如果語言有廣泛使用的 IDE,規則 (和 Bazel) 就需要與該 IDE 介接。
  6. 規則必須提供詳盡實用的說明文件,包括新手入門教材,以及提供給專家使用者的完整文件。

上述每項都不可或缺,也只有聯合起來,才能在特定生態系統中發揮 Bazel 的功能。

只要能滿足所有條件,Bazel 通常就能為該語言社群成員提供充分價值。