Comment une modification dune ligne a diminué nos temps de clonage de 99% %

(Ingénierie Pinterest) (23 octobre 2020)

Urvashi Reddy | Ingénieur logiciel, équipe de productivité en ingénierie
Adam Berry | Responsable technique, équipe de productivité de lingénierie
Rui Li | Ingénieur logiciel, équipe de productivité en ingénierie

Léquipe de productivité en ingénierie de Pinterest a découvert un petit changement qui a eu un impact important sur la réduction des temps de construction dans les pipelines. Nous avons constaté que la configuration de loption refspec pendant git fetch réduisait notre étape de clonage de 99%.

Léquipe de productivité de lingénierie de Pinterest est chargée de soutenir les ingénieurs qui créent et déploient des logiciels dans lentreprise. Notre équipe gère un certain nombre de services dinfrastructure et travaille souvent à grande échelle – migration de tous les logiciels de Pinterest (vers Bazel), création dune plate-forme de livraison continue appelée Hermez , et maintenir (les) monorepos qui sengagent à quelques centaines de fois par jour, pour nen nommer que quelques-uns.

Tous nos efforts plus importants sont conçus pour progresser vers lobjectif de rendre le développement et la livraison de logiciels sur Pinterest rapides et une expérience indolore. Récemment, on nous a rappelé à quel point les petits détails peuvent également avoir un impact important sur cet objectif. Nous avons découvert une option Git négligée qui a considérablement réduit les temps de construction dans nos pipelines dintégration continue. Afin de comprendre comment ce petit changement a eu un si grand impact, nous devons partager un peu dinformations sur nos monorepos et nos pipelines.

Monorepos et pipelines

Nous avons six référentiels principaux sur Pinterest: Pinboard, Optimus, Cosmos, Magnus, iOS et Android. Chacun est un monorepo et abrite une grande collection de services spécifiques à une langue. Le tableau daffichage est aussi vieux que lentreprise et est le plus grand monorepo. Le Pinboard a plus de 350K commits et a une taille de 20 Go lorsquil est entièrement cloné.

Le clonage de monorepos qui ont beaucoup de code et dhistoire prend du temps, et nous devons le faire fréquemment tout au long de la journée dans notre intégration continue pipelines. Pour Pinboard seul, nous effectuons plus de 60 000 tirages git les jours ouvrables. La plupart de nos scripts de configuration de pipeline Jenkins (écrits en Groovy) commencent par une étape «Checkout» où nous clonons le référentiel que les étapes ultérieures vont construire et tester. Voici à quoi ressemble une étape de « paiement » typique:

Si nous utilisions directement la CLI Git, cela se traduirait par:

«  « 

Même si nous disons à Git de faire un clonage superficiel, de ne récupérer aucune balise et de récupérer les 50 derniers commits, nous re ne pas exécuter cette opération aussi vite que possible. Cest parce que nous ne définissons pas loption refspec . Notez quen ne le définissant pas dans le script de configuration du pipeline, nous demandons à Git de récupérer tous les refspecs: + refs / heads / *: refs / remotes / origin / *. Dans le cas de Pinboard, cette opération chercherait plus de 2500 branches.

En ajoutant simplement loption refspec et en spécifiant les références qui nous intéressent (master , dans notre cas), nous pouvons limiter les références à la branche qui nous intéresse et gagner beaucoup de temps. Voici à quoi cela ressemble dans notre code de pipeline:

Ce simple changement dune ligne a réduit nos temps de clonage de 99% et considérablement réduit nos temps de construction. Clonant notre plus grand repo, Pinboard est passé de 40 minutes à 30 secondes. Cela montre que parfois nos petits efforts peuvent également avoir un impact important.

Apprentissage

Comme la plupart des équipes de productivité des développeurs, nous travaillons sur de grands services qui ont un impact important sur notre expérience quotidienne. Cependant, ce sont parfois les correctifs en une seule ligne qui peuvent faire une énorme différence. Notre travail consiste à comprendre cela.

Si vous êtes passionné par lamélioration de la productivité des développeurs, rejoignez notre équipe! Nous recrutons pour des postes dingénierie au sein de notre équipe de productivité de lingénierie.

Pour en savoir plus sur lingénierie chez Pinterest, consultez notre et visitez notre Pinterest Labs site. Pour consulter et postuler aux opportunités ouvertes, visitez notre page Carrières .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *