L'équipe d'infrastructure .NET investit dans la cohérence pour accélérer l'innovation open source
Découvrez comment des outils partagés et un système CI unique et partagé sur les référentiels GitHub permettent d'importants gains de productivité pour les développeurs.
Le défi : Rationalisation de la collaboration pour les contributeurs open source
En tant qu'organisation indépendante créée pour favoriser l'innovation par le développement ouvert et la collaboration, la Fondation .NET prend en charge un ensemble vaste et complexe de projets open source, y compris .NET Core. L'équipe Microsoft .NET Engineering Services contribue au projet et est responsable d'une grande partie de l'infrastructure qui permet aux contributeurs du monde entier de travailler ensemble.
Avec des dizaines de dépôts Git différents sur GitHub, une large gamme d’outils et plusieurs systèmes d’intégration continue (CI) utilisés au cours du projet, une grande confusion a nui à la productivité. L'ampleur même du projet a ajouté à la complexité. Par exemple, le dépôt Roslyn (compilateur C#) exécute à lui seul plus de 600 000 tests automatisés pour une itération d'une demande d'extraction. Avec plus de 50 demandes d'extraction par semaine, chacune avec plusieurs itérations, le nombre de tests CI se chiffre en milliards. Pour CoreFx (bibliothèques), les chiffres sont encore plus élevés. Alors que l'équipe des services d'ingénierie .NET planifiait la version .NET Core 3.0, elle a décidé d'apporter de grands changements pour établir une plus grande cohérence et permettre aux contributeurs de réaliser tout le potentiel du projet.
Le défi : Adaptation à un modèle d'exploitation cloud
"Une structure et des outils de dépôt distribués rendent beaucoup plus difficile pour les développeurs de passer d'un dépôt à un autre… Et si c'est si difficile pour les développeurs Microsoft, comment pouvons-nous nous attendre à ce que la plupart des contributeurs individuels le comprennent ?"
Matt Mitchell, ingénieur logiciel principal, Services d'ingénierie .NET
Améliorer la productivité grâce à des outils partagés et à un système CI unique
Pour permettre aux développeurs de se déplacer plus facilement entre les différentes parties de la pile logicielle, l'équipe des services d'ingénierie .NET s'est efforcée de regrouper tous les référentiels sous une structure de répertoires, un ensemble de commandes et une logique de construction et de test communs. L'équipe a éliminé d'autres obstacles à la productivité en déplaçant tous les workflows existants des différents systèmes CI vers un seul système dans Azure Pipelines. Comme le système est entièrement géré, ils n'ont plus la charge de gérer l'infrastructure du serveur CI. L’équipe pratique maintenant la configuration sous forme de code via les fichiers YAML stockés dans GitHub, et les pipelines YAML sont utilisés partout. Alors que certains dépôts avaient auparavant effectué des CI en série—ce qui obligeait les développeurs à attendre parfois deux ou trois heures entre les itérations sur leur code—tous les pipelines CI sont désormais parallélisés pour permettre des itérations plus rapides.
Le défi : Adaptation à un modèle d'exploitation cloud
"Maintenant que nous n'avons plus besoin de nous soucier des aspects opérationnels de CI, nous sommes libres de nous concentrer sur d'autres améliorations qui seront ressenties par tous—y compris les développeurs Microsoft et les contributeurs individuels."
Matt Mitchell, ingénieur logiciel principal, Services d'ingénierie .NET
Une meilleure collaboration fait un meilleur produit
Aujourd'hui, les développeurs peuvent plus facilement passer d'un dépôt à l'autre, rechercher la cause première d'un bogue, proposer et tester un correctif—le tout sans presque autant de connaissances spécialisées qu'auparavant. Cette collaboration open source simplifiée dans GitHub permet aux développeurs d'innover plus rapidement lorsqu'ils travaillent ensemble pour écrire, tester, créer et livrer des logiciels de haute qualité. Et parce que l'équipe des services d'ingénierie .NET peut apporter des modifications à l'infrastructure sur l'ensemble de la pile, elle est en mesure de fournir des améliorations d'outils dont les développeurs peuvent tirer parti de tous les référentiels beaucoup plus rapidement et efficacement.