Bazel Vision

回報問題 查看來源 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

  • 工程師可能會認為建構基礎知識是理所當然。軟體開發人員可專注於撰寫程式碼的創意過程,因為建構和測試的機械程序已解決。自訂建構系統以支援新語言或滿足獨特的機構需求時,使用者可專注於自身用途的獨特擴充性,不必重新發明基本管道。

  • 工程師可以輕鬆參與任何專案。開發人員只要複製專案並執行建構作業,即可開始處理新專案。無須進行本機設定,即可直接使用。透過跨平台遠端執行,他們可以在任何地點的任何機器上工作,並針對專案目標的所有平台,全面測試變更。工程師可以快速為新專案設定建構作業,或逐步遷移現有建構作業。

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

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

Bazel 從頭開始建構,可實現可重現的建構作業 (一組輸入內容一律會產生相同的輸出內容),以及可攜式建構作業 (建構作業可在任何機器上執行,不會影響輸出內容)。

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

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

Bazel 核心能力

  1. Bazel 支援多語言、多平台的建構和測試。無論您要以哪種語言和平台組合為目標,都可以執行單一指令來建構及測試整個來源樹狀結構。
  2. Bazel 建構作業快速且正確。無論是在開發人員的電腦上還是 CI 中,每次建構和測試執行作業都是累加的。
  3. Bazel 提供統一且可擴充的語言,可定義任何語言或平台的建構作業。
  4. Bazel 可連線至遠端執行和快取服務,擴充建構作業。
  5. Bazel 適用於所有主要開發平台 (Linux、MacOS 和 Windows)。
  6. 我們瞭解採用 Bazel 需要付出心力,但逐步採用是可行的。Bazel 會與特定語言/平台的實際標準工具介接。

服務語言社群

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

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

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

良好規則集的相關規定

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

這些項目都不可或缺,只有結合起來,才能在特定生態系統中發揮 Bazel 的能力。

而且通常也足夠,一旦全部完成,Bazel 就能充分為該語言社群的成員提供價值。