Facebook a publié le système de construction Buck2

Facebook a introduit un nouveau système de build, Buck2, visant à organiser la construction de projets à partir de très grands référentiels, comprenant du code dans différents langages de programmation. Les principales différences entre la nouvelle implémentation et le système Buck précédemment utilisé chez Facebook sont l'utilisation du langage Rust au lieu de Java et une augmentation significative de l'efficacité et de la productivité du processus d'assemblage (dans les tests internes de la même infrastructure, Buck2 effectue l'assemblage tâches deux fois plus rapides que Buck). Le code est distribué sous la licence Apache 2.0.

Le système n'est pas lié à l'assemblage de code dans des langages spécifiques et prend en charge l'assemblage de projets écrits dans les langages C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell et OCaml. , utilisé par Facebook. Le langage Starlark, basé sur Python (comme dans Bazel), est utilisé pour concevoir des modules complémentaires, construire des scripts et des règles. Starlark vous permet d'étendre les capacités du système d'assemblage et de faire abstraction des langages spécifiques utilisés dans les projets assemblés.

Des performances élevées sont obtenues grâce à la mise en cache des résultats, à la parallélisation du travail et à la prise en charge de l'exécution à distance des tâches (Remote Build Execution). Dans l'environnement d'assemblage, le concept d'« herméticité » est utilisé - le code assemblé est coupé du monde extérieur, rien n'est chargé de l'extérieur pendant le processus d'assemblage et des exécutions répétées de travaux sur différents systèmes conduisent au même résultat ( assemblages répétés, par exemple, le résultat de l'assemblage d'un projet sur la machine du développeur sera totalement identique au build sur le serveur d'intégration continue). La situation de manque de dépendance est perçue comme une erreur dans Buck2.

Principales caractéristiques de Buck2 :

  • Les règles de prise en charge des langages de programmation et le cœur du système d'assemblage sont complètement distincts. Les règles utilisent le langage Starlark, et la boîte à outils et l'implémentation Starlark sont écrites en Rust.
  • Le système d'assemblage utilise un seul graphe de dépendances incrémentales (sans division en étapes), ce qui permet d'augmenter la profondeur de parallélisation du travail par rapport à Buck et Bazel et d'éviter de nombreux types d'erreurs.
  • Le code Buck2 publié sur GitHub et les règles de support des langages de programmation sont quasiment identiques à la version interne utilisée dans l'infrastructure Facebook (les seules différences concernent les éditions des compilateurs et des serveurs d'assemblage utilisés dans Facebook).
  • Le système d'assemblage est conçu en vue de l'intégration avec des systèmes d'exécution de tâches à distance qui vous permettent d'exécuter des travaux sur des serveurs distants. L'API d'exécution à distance est compatible avec Bazel et testée pour sa compatibilité avec Buildbarn et EngFlow.
  • L'intégration avec des systèmes de fichiers virtuels est fournie, dans laquelle le contenu de l'ensemble du référentiel est présenté, mais en fait, le travail est effectué avec une tranche locale actuelle d'une partie du référentiel (le développeur voit l'intégralité du référentiel, mais uniquement les fichiers requis auxquels vous accédez sont extraits du référentiel). Les VFS basés sur EdenFS et Git LFS, utilisés dans Sapling, sont pris en charge.

Source: opennet.ru

Ajouter un commentaire