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 規則必須能與該社群的工作流程和慣例整合。

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

良好規則集的必要條件

  1. 規則需要支援針對該程式有效率的建構和測試,包括程式碼涵蓋率。
  2. 這些規則需要針對語言 (例如 Java 的 Maven) 使用廣泛使用的「套件管理員」介面,並支援其他廣泛使用的建構系統的漸進式遷移路徑。
  3. 規則必須可擴充且可互通,遵循 Bazel 三明治原則。
  4. 規則必須已就緒。在實務上,這意味著可以使用工具鍊機制設定
  5. 如果有語言有廣泛使用的 IDE,規則 (和 Bazel) 必須連結該語言。
  6. 規則需要詳盡且可用的說明文件,包括適合新使用者的入門資料,以及專家使用者專用的全方位文件。

這些項目都是必要的,只有將這些項目一起在 Bazel 的適宜生態系統上實現。

此外,指標數量也夠多,只要執行完所有工作,Bazel 就會將值完整地傳達給該語言社群成員。