Peut-être que c'est juste le rêve d'un homme fou, mais
Dans mon entreprise, nous avons un gros projet C# .NET, avec ~25 solutions (très anciennes) et ~3,5 millions de localisations. Le problème auquel je suis confronté est le suivant : les temps de construction sont trop lents. Actuellement, il faut 7 minutes avec un SSD (machines de développement), 15 minutes et plus dans une VM avec des disques durs normaux (ce serait le système de construction TeamCity que j'aimerais déployer). Je sais, le système de construction devrait être le plus rapide, mais ce n'est rien que je puisse changer à court terme.
Je veux raccourcir la boucle de rétroaction commit-build-unittest pour les développeurs (de préférence sur la machine Teamcity en ce moment) en compilant juste le(s) projet(s) qui ont été touchés par le dernier commit, en prenant tous les autres assemblages à partir par exemple d'un serveur nuget local (le serveur Teamcity lui-même avec la version 7.0).
Maintenant, ça serait immensément de réduire la boucle de rétroaction (de 15 minutes à moins d'une minute, étant donné réel tests unitaires) pour les petits commits.
Je sais que le problème d'une telle compilation partielle est la possibilité d'ignorer des erreurs de compilation (des interfaces non concordantes pourraient passer inaperçues), mais cela serait atténué en faisant tourner une deuxième instance de serveur de compilation (Teamcity ?) qui exécute toute l'enchilada, en parallèle. Mais obtenir un premier retour immédiat est très important pour moi.
Ma question est la suivante : existe-t-il un système de construction ou d'intégration continue capable de gérer cette tâche ? Ou bien devrais-je écrire mon propre service d'arrière-plan qui tienne compte des engagements ? Ce qui serait un peu désagréable, car nous utilisons FinalBuilder scripts, et ce format ne semble pas être lisible par une quelconque API (mais je n'ai pas creusé assez profondément dans ce domaine).
P.S. : J'aimerais également n'exécuter les tests unitaires que pour les projets qui ont été modifiés par le dernier commit, ou au moins les classer par ordre de priorité. Mais c'est une réflexion après coup.