Facebook апублікаваў сістэму зборкі Buck2

Facebook прадставіў новую зборачную сістэму Buck2, арыентаваную на арганізацыю зборкі праектаў з вельмі буйных рэпазітароў, якія ўключаюць код на розных мовах праграмавання. Ключавымі адрозненнямі новай рэалізацыі ад раней якая ўжывалася ў Facebook сістэмы Buck з'яўляецца выкарыстанне мовы Rust замест Java і істотнае павелічэнне эфектыўнасці і прадукцыйнасці зборачнага працэсу (ва ўнутраных тэстах у той жа інфраструктуры Buck2 выконвае зборачныя заданні хутчэй Buck у два разы). Код распаўсюджваецца пад ліцэнзіяй Apache 2.0.

Сістэма не прывязана да зборкі кода на пэўных мовах і са скрынкі падтрымлівае зборку праектаў, напісаных на мовах C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell і OCaml, якія выкарыстоўваюцца ў Facebook. Для афармлення дадаткаў, зборачных сцэнарыяў і правіл ужываецца мова Starlark, заснаваны на Python (як у Bazel). Starlark дазваляе пашыраць магчымасці зборачнай сістэмы і абстрагавацца ад канкрэтных моў, якія выкарыстоўваюцца ў збіраемых праектах.

Высокая прадукцыйнасць дасягаецца за кошт кэшавання вынікаў, распаралелявання прац і падтрымкі выдаленага выканання заданняў (Remote Build Execution). У зборачным асяроддзі ўжываецца канцэпцыя "гермітычнасці" - збіраны код адрэзаны ад навакольнага свету, падчас зборкі звонку нічога не загружаецца, а паўторныя выкананні прац на розных сістэмах прыводзяць да аднаго і таго ж выніку (паўтараныя зборкі, напрыклад, вынік зборкі праекта на машыне распрацоўніка будзе цалкам супадаць са зборкай на серверы бесперапыннай інтэграцыі). Сітуацыя адсутнасці залежнасці ўспрымаецца ў Buck2 як памылка.

Ключавыя асаблівасці Buck2:

  • Правілы падтрымкі моў праграмавання і ядро ​​зборачнай сістэмы поўнасцю падзелены. Для правілаў выкарыстоўваецца мова Starlark, а інструментар і рэалізацыя Starlark напісаны на Rust.
  • У зборачнай сістэме прымяняецца адзіны інкрыментальны граф залежнасцяў (без падзелу на стадыі), што дазваляе павысіць глыбіню распаралельвання работ у параўнанні з Buck і Bazel і пазбегнуць многіх тыпаў памылак.
  • Апублікаваны на GitHub код Buck2 і правілы падтрымкі моў праграмавання амаль ідэнтычныя з унутранай версіяй, якая ўжываецца ў інфраструктуры Facebook (адрозненні толькі ў прывязцы да рэдакцыяў кампілятараў і зборачным серверам, ужывальным у Facebook).
  • Зборачная сістэма спраектавана з аглядкай на інтэграцыю з сістэмамі выдаленага выканання заданняў, якія дазваляюць запускаць працы на выдаленых серверах. API для выдаленага выканання сумяшчальны з Bazel і пратэставаны на сумяшчальнасць з Buildbarn і EngFlow.
  • Забяспечана інтэграцыя з віртуальнымі файлавымі сістэмамі, у якіх прадстаўлена змесціва ўсяго рэпазітара, але фактычна праца ажыццяўляецца з актуальным лакальным зрэзам часткі рэпазітара (распрацоўнік бачыць увесь рэпазітар, але з рэпазітара здабываюцца толькі запатрабаваныя файлы, да якіх выконваецца зварот). Падтрымліваюцца VFS на базе EdenFS і Git LFS, якія выкарыстоўваюцца ў Sapling.

Крыніца: opennet.ru

Дадаць каментар