Facebook ippubblika s-sistema tal-bini Buck2

Facebook introduċa sistema ġdida ta’ bini, Buck2, immirata biex torganizza l-bini ta’ proġetti minn repożitorji kbar ħafna, inkluż kodiċi f’lingwi ta’ programmar differenti. Id-differenzi ewlenin bejn l-implimentazzjoni l-ġdida u s-sistema Buck użata qabel fuq Facebook huma l-użu tal-lingwa Rust minflok Java u żieda sinifikanti fl-effiċjenza u l-produttività tal-proċess ta 'assemblaġġ (f'testijiet interni fl-istess infrastruttura, Buck2 iwettaq assemblaġġ kompiti darbtejn aktar malajr minn Buck). Il-kodiċi huwa mqassam taħt il-liċenzja Apache 2.0.

Is-sistema mhix marbuta mal-assemblaġġ tal-kodiċi f'lingwi speċifiċi u barra mill-kaxxa tappoġġja l-assemblaġġ ta 'proġetti miktuba fil-lingwi C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell u OCaml , użat minn Facebook. Il-lingwa Starlark, ibbażata fuq Python (bħal f'Bazel), tintuża biex tiddisinja add-ons, tibni skripts u regoli. Starlark jippermettilek tespandi l-kapaċitajiet tas-sistema ta 'assemblaġġ u tastratta mil-lingwi speċifiċi użati fil-proġetti mmuntati.

Prestazzjoni għolja tinkiseb permezz tal-caching tar-riżultati, il-parallelizzazzjoni tax-xogħol u l-appoġġ għall-eżekuzzjoni remota tal-kompiti (Remote Build Execution). Fl-ambjent tal-assemblaġġ, jintuża l-kunċett ta '"ermetiċità" - il-kodiċi immuntat jinqata' mid-dinja ta 'barra, xejn ma jitgħabba minn barra matul il-proċess tal-assemblaġġ, u eżekuzzjonijiet ripetuti ta' xogħol fuq sistemi differenti jwasslu għall-istess riżultat ( assemblaġġi ripetuti, per eżempju, ir-riżultat ta 'assemblaġġ ta' proġett fuq il-magna tal-iżviluppatur se jkun kompletament identiku għall-bini fuq is-server ta 'integrazzjoni kontinwa). Is-sitwazzjoni ta' nuqqas ta' dipendenza hija pperċepita bħala żball f'Buck2.

Karatteristiċi ewlenin ta 'Buck2:

  • Ir-regoli għall-appoġġ tal-lingwi ta 'programmar u l-qalba tas-sistema ta' assemblaġġ huma kompletament separati. Ir-regoli jużaw il-lingwa Starlark, u l-għodda u l-implimentazzjoni Starlark huma miktuba bir-Rud.
  • Is-sistema ta 'assemblaġġ tuża graff wieħed ta' dipendenza inkrementali (mingħajr diviżjoni fi stadji), li tippermetti li żżid il-fond tal-parallelizzazzjoni tax-xogħol meta mqabbla ma 'Buck u Bazel u tevita ħafna tipi ta' żbalji.
  • Il-kodiċi Buck2 ippubblikat fuq GitHub u r-regoli għall-appoġġ tal-lingwi ta 'programmar huma kważi identiċi għall-verżjoni interna użata fl-infrastruttura ta' Facebook (l-uniċi differenzi huma fir-rigward tal-edizzjonijiet ta 'kompilaturi u servers ta' assemblaġġ użati f'Facebook).
  • Is-sistema ta 'assemblaġġ hija ddisinjata b'għajnejha għall-integrazzjoni ma' sistemi ta 'eżekuzzjoni ta' kompiti remoti li jippermettulek tmexxi xogħol fuq servers remoti. L-API ta 'eżekuzzjoni remota hija kompatibbli ma' Bazel u ttestjata għall-kompatibilità ma 'Buildbarn u EngFlow.
  • Hija pprovduta integrazzjoni ma 'sistemi ta' fajls virtwali, li fiha l-kontenut tar-repożitorju kollu huwa ppreżentat, iżda fil-fatt, ix-xogħol jitwettaq b'porzjon lokali attwali ta 'parti mir-repożitorju (l-iżviluppatur jara r-repożitorju kollu, iżda l-fajls meħtieġa biss li huma aċċessati huma estratti mir-repożitorju). VFS ibbażati fuq EdenFS u Git LFS, li jintużaw f'Spling, huma appoġġjati.

Sors: opennet.ru

Żid kumment