Facebook udgav Buck2-byggesystemet

Facebook har introduceret et nyt byggesystem, Buck2, der fokuserer på at bygge projekter fra meget store depoter, der indeholder kode på forskellige programmeringssprog. De vigtigste forskelle mellem den nye implementering og Buck-systemet, der tidligere blev brugt af Facebook, er brugen af ​​Rust-sproget i stedet for Java og en væsentlig stigning i effektiviteten og ydeevnen af ​​assembleringsprocessen (i interne tests i samme infrastruktur udfører Buck2 assembly opgaver dobbelt så hurtigt som Buck). Koden distribueres under Apache 2.0-licensen.

Systemet er ikke bundet til byggekode på specifikke sprog og understøtter ud af boksen byggeprojekter skrevet i C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell og OCaml brugt af Facebook. Starlark-sproget baseret på Python (som i Bazel) bruges til at designe tilføjelser, bygge scripts og regler. Starlark giver dig mulighed for at udvide byggesystemets muligheder og abstrahere fra de specifikke sprog, der bruges i de projekter, der bygges.

Høj ydeevne opnås gennem caching af resultater, parallelisering af arbejde og support til fjernudførelse af opgaver (Remote Build Execution). I byggemiljøet bruges begrebet "tæthed" - den kompilerede kode er afskåret fra omverdenen, intet belastes udefra under byggeprocessen, og gentagen udførelse af arbejde på forskellige systemer fører til det samme resultat ( gentagne builds, for eksempel, vil resultatet af at bygge et projekt på udviklerens maskine være nøjagtigt det samme som buildet på den kontinuerlige integrationsserver). Situationen med manglende afhængighed opfattes i Buck2 som en fejl.

Buck2 nøglefunktioner:

  • Reglerne for understøttelse af programmeringssprog og kernen i byggesystemet er fuldstændig adskilt. Reglerne er skrevet på Starlark-sproget, og Starlark-værktøjssættet og implementering er skrevet i Rust.
  • Byggesystemet bruger en enkelt inkrementel afhængighedsgraf (uden opdeling i trin), som giver dig mulighed for at øge dybden af ​​parallelisering af arbejdet sammenlignet med Buck og Bazel og undgå mange typer fejl.
  • Buck2-koden udgivet på GitHub og programmeringssprogets supportregler er næsten identiske med den interne version, der bruges i Facebook-infrastrukturen (de eneste forskelle er i binding til compiler-udgaver og build-servere, der bruges af Facebook).
  • Byggesystemet er designet med henblik på integration med eksterne jobudførelsessystemer, der giver dig mulighed for at køre job på eksterne servere. Remote execution API er kompatibel med Bazel og er blevet testet for kompatibilitet med Buildbarn og EngFlow.
  • Integration med virtuelle filsystemer er tilvejebragt, hvor indholdet af hele depotet præsenteres, men faktisk arbejdes der med det faktiske lokale udsnit af en del af depotet (udvikleren ser hele depotet, men kun det nødvendige filer, der tilgås, hentes fra lageret). Understøttet er VFS baseret på EdenFS og Git LFS, som bruges af Sapling.

Kilde: opennet.ru

Tilføj en kommentar