Facebook publikoi sistemin e ndërtimit Buck2

Facebook prezantoi një sistem të ri ndërtimi, Buck2, që synon të organizojë ndërtimin e projekteve nga depo shumë të mëdha, duke përfshirë kodin në gjuhë të ndryshme programimi. Dallimet kryesore midis implementimit të ri dhe sistemit Buck të përdorur më parë në Facebook janë përdorimi i gjuhës Rust në vend të Java dhe një rritje e konsiderueshme në efikasitetin dhe produktivitetin e procesit të montimit (në testet e brendshme në të njëjtën infrastrukturë, Buck2 kryen montim detyrat dy herë më shpejt se Buck). Kodi shpërndahet nën licencën Apache 2.0.

Sistemi nuk është i lidhur me montimin e kodit në gjuhë specifike dhe jashtë kutisë mbështet montimin e projekteve të shkruara në gjuhët C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell dhe OCaml , përdorur nga Facebook. Gjuha Starlark, e bazuar në Python (si në Bazel), përdoret për të dizajnuar shtesa, për të ndërtuar skripta dhe rregulla. Starlark ju lejon të zgjeroni aftësitë e sistemit të montimit dhe të abstraktoni nga gjuhët specifike të përdorura në projektet e mbledhura.

Performanca e lartë arrihet përmes cachimit të rezultateve, paralelizimit të punës dhe mbështetjes për ekzekutimin në distancë të detyrave (Remote Build Execution). Në mjedisin e montimit, përdoret koncepti i "hermeticitetit" - kodi i montuar shkëputet nga bota e jashtme, asgjë nuk ngarkohet nga jashtë gjatë procesit të montimit, dhe ekzekutimet e përsëritura të punës në sisteme të ndryshme çojnë në të njëjtin rezultat ( asambletë e përsëritura, për shembull, rezultati i montimit të një projekti në makinën e zhvilluesit do të jetë plotësisht identik me ndërtimin në serverin e integrimit të vazhdueshëm). Situata e mungesës së varësisë perceptohet si një gabim në Buck2.

Karakteristikat kryesore të Buck2:

  • Rregullat për mbështetjen e gjuhëve të programimit dhe thelbin e sistemit të montimit janë plotësisht të ndara. Rregullat përdorin gjuhën Starlark, dhe paketa e veglave Starlark dhe zbatimi janë shkruar në Rust.
  • Sistemi i montimit përdor një grafik të vetëm të varësisë në rritje (pa ndarje në faza), i cili lejon rritjen e thellësisë së paralelizimit të punës në krahasim me Buck dhe Bazel dhe shmangien e shumë llojeve të gabimeve.
  • Kodi Buck2 i publikuar në GitHub dhe rregullat për mbështetjen e gjuhëve të programimit janë pothuajse identike me versionin e brendshëm të përdorur në infrastrukturën e Facebook (dallimet e vetme janë në lidhje me botimet e përpiluesve dhe serverëve të montimit të përdorur në Facebook).
  • Sistemi i montimit është projektuar duke synuar integrimin me sistemet e ekzekutimit të detyrave në distancë që ju lejojnë të ekzekutoni punën në serverë në distancë. API-ja e ekzekutimit në distancë është e përputhshme me Bazel dhe e testuar për pajtueshmërinë me Buildbarn dhe EngFlow.
  • Sigurohet integrimi me sistemet virtuale të skedarëve, në të cilat paraqitet përmbajtja e të gjithë depove, por në fakt, puna kryhet me një pjesë aktuale lokale të një pjese të depove (zhvilluesi sheh të gjithë depon, por vetëm skedarët e kërkuar që aksesohen nxirren nga depoja). Mbështetet VFS e bazuar në EdenFS dhe Git LFS, të cilat përdoren në Sapling.

Burimi: opennet.ru

Shto një koment