Facebook 發布了 Buck2 建置系統

Facebook 推出了一個新的建置系統 Buck2,旨在組織來自非常大的儲存庫的專案構建,包括不同程式語言的程式碼。 新實作與Facebook先前使用的Buck系統之間的主要區別在於使用Rust語言而不是Java,並且組裝過程的效率和生產力顯著提高(在相同基礎設施的內部測試中,Buck2執行組裝)任務速度是巴克的兩倍)。 該程式碼根據 Apache 2.0 許可證分發。

該系統不依賴特定語言的程式碼彙編,並且開箱即用地支援用 C++、Python、Rust、Kotlin、Erlang、Swift、Objective-C、Haskell 和 OCaml 語言編寫的專案的彙編,由 Facebook 使用。 Starlark 語言基於 Python(如 Bazel),用於設計附加元件、建置腳本和規則。 Starlark 可讓您擴展組裝系統的功能,並從組裝專案中使用的特定語言中進行抽象化。

高效能是透過結果快取、工作並行化和支援遠端執行任務(遠端建置執行)來實現的。 在彙編環境中,使用了「密封性」的概念——彙編程式碼與外界隔絕,彙編過程中不從外部加載任何內容,並且在不同系統上重複執行工作會導致相同的結果(重複組裝,例如,在開發人員的機器上組裝專案的結果將與持續整合伺服器上的建置完全相同)。 缺乏依賴性的情況在 Buck2 中被視為錯誤。

Buck2的主要特點:

  • 支援程式語言的規則和彙編系統的核心是完全分開的。 規則使用 Starlark 語言,Starlark 工具包和實作是用 Rust 寫的。
  • 彙編系統使用單一增量依賴圖(不分割階段),與 Buck 和 Bazel 相比,它允許增加工作並行化的深度,並避免多種類型的錯誤。
  • GitHub 上發布的 Buck2 程式碼以及支援程式語言的規則與 Facebook 基礎設施中使用的內部版本幾乎相同(唯一的差異與 Facebook 中使用的編譯器和彙編伺服器的版本有關)。
  • 組裝系統的設計著重於與遠端任務執行系統集成,使您可以在遠端伺服器上運行工作。 遠端執行 API 與 Bazel 相容,並測試了與 Buildbarn 和 EngFlow 的兼容性。
  • 提供與虛擬文件系統的集成,其中呈現整個存儲庫的內容,但實際上,工作是使用存儲庫部分的當前本地切片進行的(開發人員看到整個存儲庫,但只能看到所需的文件)所存取的內容是從儲存庫中提取的)。 支援基於 EdenFS 的 VFS 和 Sapling 中使用的 Git LFS。

來源: opennet.ru

添加評論