Simple Science

La science de pointe expliquée simplement

# Informatique# Génie logiciel

Optimiser l'intégration continue avec Bazel

Une étude sur l'utilisation de Bazel pour des builds CI plus rapides.

― 8 min lire


Bazel : Accélérer lesBazel : Accélérer lesprocessus CIles vitesses de build CI.Une étude révèle l'impact de Bazel sur
Table des matières

L'Intégration continue (CI) c'est une méthode que les développeurs de logiciels utilisent pour intégrer souvent des changements dans leurs projets. Cette pratique aide à attraper les erreurs tôt et à maintenir la qualité du code. Mais, des builds CI trop longs peuvent ralentir le développement, donc c'est super important d'optimiser les temps de build.

Beaucoup de développeurs ont des galères quand leurs builds CI prennent trop de temps, souvent en attendant des retours avant de pouvoir continuer à bosser. Des techniques ont été proposées pour améliorer les temps de build, comme mieux planifier et choisir les tests de manière astucieuse. Des nouvelles technologies comme Bazel visent à régler ces problèmes en proposant des fonctionnalités conçues pour accélérer les builds. Bien que Bazel prenne de l'ampleur, on ne comprend pas trop à quel point ça fonctionne vraiment, surtout pour les projets avec des durées de build longues.

Aperçu de l'étude

Dans notre étude, on a regardé 383 projets open-source sur GitHub qui utilisent Bazel comme outil de build. On voulait voir à quelle fréquence les développeurs utilisent les fonctionnalités avancées de Bazel, comme les builds parallèles et incrémentaux, dans les services CI populaires. On voulait aussi comparer ces résultats avec des projets qui utilisent un autre outil de build, Maven.

Pour analyser les Performances, on a fait des milliers de tests sur ces projets Bazel pour voir combien de temps on pouvait économiser en utilisant ces fonctionnalités. Ça impliquait d'examiner les logs de build et de regarder les derniers commits de différents projets pour évaluer comment Bazel fonctionnait dans l'environnement CI.

Importance de la vitesse de build

Avoir un processus de build CI rapide et efficace est crucial pour les développeurs. Plus un build prend de temps, plus les développeurs doivent attendre des retours sur leurs changements, ce qui peut ralentir le progrès général. Idéalement, les builds CI devraient finir rapidement, car des études ont montré que beaucoup de développeurs préfèrent des temps de build de dix minutes ou moins.

Cependant, des recherches montrent qu'un grand nombre de builds CI peuvent prendre beaucoup plus de temps que ça. En fait, environ 40 % des builds prennent plus d'une demi-heure. À mesure que le développement logiciel devient plus fréquent et repose sur des pratiques comme la livraison continue, le problème des builds lents est susceptible de s'aggraver.

Solutions traditionnelles aux problèmes de build

Différentes stratégies ont été proposées pour s'attaquer au problème des builds CI lents :

  1. Prédiction des résultats de build : Cette technique vise à éviter les builds inutiles en prédisant quels commits ne nécessitent pas un build complet basé sur des résultats passés.

  2. Groupe de commits : Cela consiste à regrouper plusieurs commits pour les builder ensemble, ce qui peut faire gagner du temps.

  3. Optimisations de tests : En sélectionnant et en priorisant les tests à exécuter, les développeurs peuvent réduire le temps total de test nécessaire après un build.

  4. Optimisation du code source : Refactoriser le code peut aussi aider, car éliminer les éléments redondants peut mener à des builds plus rapides.

Malgré ces stratégies, les systèmes de build traditionnels peuvent avoir des difficultés avec la précision. La plupart des outils existants n'ont pas les informations nécessaires pour créer un graphique de dépendance de build précis, ce qui peut mener à des erreurs lors des builds parallèles et incrémentaux.

Nouvelles technologies de build

Récemment, des systèmes de build basés sur des artefacts comme Bazel ont attiré l'attention pour leur potentiel à optimiser la performance des builds tout en maintenant la précision. Sorti en tant qu'outil open-source par Google, Bazel permet aux développeurs de décrire les artefacts et leurs dépendances dans les fichiers de build. Cette méthode aide à créer un graphique de dépendance précis, crucial pour des builds parallèles et incrémentaux fiables.

Bazel peut gérer efficacement les dépendances et effectue la mise en cache des résultats de build, ce qui accélère les futurs builds. Cette fonctionnalité permet aux développeurs de partager les résultats de build sur des machines séparées, boostant encore la performance.

Questions de recherche

Cette étude vise à répondre à plusieurs questions importantes sur l'utilisation de Bazel dans les builds CI :

  1. Comment les développeurs utilisent-ils les capacités de build parallèles et incrémentales de Bazel dans leurs projets ?
  2. Quel impact la fonctionnalité de build parallèle de Bazel a-t-elle sur la performance générale des builds ?
  3. Quelle est l'efficacité de la fonctionnalité de build Incrémental de Bazel pour réduire les temps de build ?

En répondant à ces questions, on espère fournir des éclaircissements sur la manière dont les développeurs peuvent mieux utiliser Bazel et comprendre ses bénéfices potentiels.

Méthodologie de l'étude

Pour obtenir des réponses à ces questions, on a mis en place une méthodologie complète :

  1. Collecte de données : On a collecté des données sur les projets Bazel et Maven depuis GitHub via leur API de recherche. On a identifié un total de 383 projets Bazel et 4 727 projets Maven pour analyser leurs processus de build.

  2. Analyse de la configuration CI : On a examiné les configurations CI pour les projets Bazel et Maven pour voir comment ils implémentaient les services CI.

  3. Expériences de performance : On a réalisé des milliers d'expériences sur les projets collectés pour mesurer l'impact des builds parallèles et incrémentaux sur les temps de build.

  4. Comparaison : Tout au long de l'étude, on a comparé les résultats des projets Bazel avec ceux des projets Maven pour mieux comprendre les différences en termes de performance et d'utilisation des fonctionnalités.

Résultats

Utilisation de Bazel dans les builds CI

D'après notre analyse, on a trouvé qu'un pourcentage significatif de projets Bazel adoptait des services CI mais n'utilisait pas pleinement les fonctionnalités de Bazel. En fait, 31,23 % des projets Bazel n'utilisaient pas Bazel dans leur configuration CI. Même parmi ceux qui l'utilisaient, beaucoup s'appuyaient sur des outils supplémentaires pour faciliter son fonctionnement. Seuls 44,08 % des projets profitaient de la mise en cache de Bazel pour les builds incrémentaux.

Impact des builds parallèles

Quand on a regardé les gains de performance des builds parallèles, on a constaté qu'ils pouvaient améliorer significativement la vitesse des builds, surtout pour les builds plus longs. Par exemple, les accélérations variaient de 2,00x à 12,80x selon le degré de parallélisme utilisé. Cependant, les builds plus courts n'ont pas montré beaucoup d'amélioration avec des niveaux de parallélisme plus bas, et même au maximum, plusieurs projets n'ont pas pu bénéficier pleinement de l'exécution parallèle.

Avantages des builds incrémentaux

Les fonctionnalités de build incrémental de Bazel ont aussi montré des résultats prometteurs. Pour les builds plus longs, des accélérations médianes ont été observées à 4,22x et 4,71x en utilisant différentes stratégies de mise en cache. Cependant, pour les durées de build plus courtes, les bénéfices étaient beaucoup moins prononcés, indiquant que les builds incrémentaux sont plus utiles pour les projets plus larges.

Conclusion

En conclusion, notre étude met en lumière à la fois le potentiel et les défis de l'utilisation de Bazel dans les environnements d'intégration continue. Bien que Bazel offre des fonctionnalités puissantes pour accélérer les temps de build, beaucoup de développeurs n'exploitent pas pleinement ces capacités, particulièrement dans les configurations CI. À travers cette recherche, on vise non seulement à éclaircir l'utilisation actuelle de Bazel mais aussi à encourager une adoption plus large des technologies de build modernes.

À mesure que les développeurs cherchent à améliorer leurs processus CI, comprendre l'efficacité d'outils comme Bazel est crucial. En soulignant comment les développeurs peuvent utiliser Bazel plus efficacement, on espère guider des améliorations futures dans la performance des builds à travers les projets logiciels.

Travail futur

Les recherches futures pourraient explorer d'autres aspects des capacités de Bazel, notamment dans différents environnements de projets. En enquêtant sur les raisons derrière l'utilisation limitée de certaines fonctionnalités, on pourrait aussi dégager des opportunités d'amélioration. De plus, étudier comment différents types de projets réagissent aux fonctionnalités de Bazel pourrait fournir des insights précieux pour la communauté de développement.

Dans l'évolution continue des pratiques de développement logiciel, comprendre et utiliser des outils puissants comme Bazel est essentiel pour garantir l'efficacité et la qualité dans la livraison de logiciels.

Source originale

Titre: Does Using Bazel Help Speed Up Continuous Integration Builds?

Résumé: A long continuous integration (CI) build forces developers to wait for CI feedback before starting subsequent development activities, leading to time wasted. In addition to a variety of build scheduling and test selection heuristics studied in the past, new artifact-based build technologies like Bazel have built-in support for advanced performance optimizations such as parallel build and incremental build (caching of build results). However, little is known about the extent to which new build technologies like Bazel deliver on their promised benefits, especially for long-build duration projects. In this study, we collected 383 Bazel projects from GitHub, then studied their parallel and incremental build usage of Bazel in 4 popular CI services, and compared the results with Maven projects. We conducted 3,500 experiments on 383 Bazel projects and analyzed the build logs of a subset of 70 buildable projects to evaluate the performance impact of Bazel's parallel builds. Additionally, we performed 102,232 experiments on the 70 buildable projects' last 100 commits to evaluate Bazel's incremental build performance. Our results show that 31.23% of Bazel projects adopt a CI service but do not use Bazel in the CI service, while for those who do use Bazel in CI, 27.76% of them use other tools to facilitate Bazel's execution. Compared to sequential builds, the median speedups for long-build duration projects are 2.00x, 3.84x, 7.36x, and 12.80x, at parallelism degrees 2, 4, 8, and 16, respectively, even though, compared to a clean build, applying incremental build achieves a median speedup of 4.22x (with a build system tool-independent CI cache) and 4.71x (with a build system tool-specific cache) for long-build duration projects. Our results provide guidance for developers to improve the usage of Bazel in their projects.

Auteurs: Shenyu Zheng, Bram Adams, Ahmed E. Hassan

Dernière mise à jour: 2024-05-01 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2405.00796

Source PDF: https://arxiv.org/pdf/2405.00796

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires