Facebook publisearre it Buck2-bouwsysteem

Facebook hat in nij bousysteem yntrodusearre, Buck2, rjochte op it bouwen fan projekten út heul grutte repositories dy't koade yn ferskate programmeartalen omfetsje. De wichtichste ferskillen tusken de nije ymplemintaasje en it Buck-systeem dat earder brûkt waard troch Facebook binne it gebrûk fan 'e Rust-taal ynstee fan Java en in signifikante ferheging fan' e effisjinsje en prestaasjes fan it assemblageproses (yn ynterne testen yn deselde ynfrastruktuer fiert Buck2 assemblage út taken twa kear sa fluch as Buck). De koade is ferspraat ûnder de Apache 2.0-lisinsje.

It systeem is net bûn oan boukoade yn spesifike talen en stipet bûten it fak bouwprojekten skreaun yn C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell en OCaml brûkt troch Facebook. De Starlark-taal basearre op Python (lykas yn Bazel) wurdt brûkt om tafoegings te ûntwerpen, skripts en regels te bouwen. Starlark lit jo de mooglikheden fan it bousysteem útwreidzje en abstrahere fan 'e spesifike talen brûkt yn' e projekten dy't wurde boud.

Hege prestaasjes wurde berikt troch caching fan resultaten, parallelisaasje fan wurk en stipe foar útfiering fan taken op ôfstân (Remote Build Execution). Yn 'e bouwomjouwing wurdt it konsept fan "dichtheid" brûkt - de kompilearre koade wurdt ôfsnien fan 'e bûtenwrâld, neat wurdt fan bûten laden tidens it bouproses, en werhelle útfiering fan wurk op ferskate systemen liedt ta itselde resultaat ( werhelle builds, bygelyks, it resultaat fan it bouwen fan in projekt op 'e masine fan' e ûntwikkelder sil krekt itselde wêze as de build op 'e trochgeande yntegraasjeserver). De situaasje fan gebrek oan ôfhinklikens wurdt yn Buck2 ûnderfûn as in flater.

Buck2 wichtige funksjes:

  • De regels foar it stypjen fan programmeartalen en de kearn fan it buildsysteem binne folslein skieden. De regels binne skreaun yn 'e Starlark-taal, en de Starlark-ark en ymplemintaasje binne skreaun yn Rust.
  • It bousysteem brûkt in inkele ynkrementele ôfhinklikensgrafyk (sûnder ferdieling yn stadia), wêrtroch jo de djipte fan parallelisaasje fan wurk kinne fergrutsje yn ferliking mei Buck en Bazel en in protte soarten flaters kinne foarkomme.
  • De Buck2-koade publisearre op GitHub en de regels foar stipe foar programmeartaal binne hast identyk mei de ynterne ferzje dy't brûkt wurdt yn 'e Facebook-ynfrastruktuer (de iennichste ferskillen binne yn ferbining mei de kompiler-edysjes en bouwen fan servers dy't brûkt wurde troch Facebook).
  • It bousysteem is ûntworpen mei it each op yntegraasje mei systemen foar útfiering fan wurk op ôfstân wêrmei jo banen kinne útfiere op tsjinners op ôfstân. De API foar útfiering op ôfstân is kompatibel mei Bazel en is hifke foar kompatibiliteit mei Buildbarn en EngFlow.
  • Yntegraasje mei firtuele bestânsystemen is foarsjoen, wêryn de ynhâld fan 'e hiele repository wurdt presintearre, mar feitlik wurdt wurk útfierd mei it eigentlike lokale diel fan in diel fan' e repository (de ûntwikkelder sjocht it heule repository, mar allinich de fereaske bestannen dy't tagong krije, wurde ophelle út it repository). Stipe binne VFS basearre op EdenFS en Git LFS, dy't wurde brûkt troch Sapling.

Boarne: opennet.ru

Add a comment