Je participe à la maintenance d'un portefeuille assez important d'applications .NET. Le portefeuille contient également des applications héritées construites sur d'autres plates-formes - C ++ natif, formulaires ECLIPS, etc.
J'ai actuellement un framework de build complexe au dessus de NAnt qui gère les builds pour toutes ces applications. Le framework de construction utilise NAnt pour faire un certain nombre de choses différentes:
- Extraire le code de Subversion et créer des balises dans Subversion
- Générez le code à l'aide de MSBuild pour .NET ou d'autres compilateurs pour d'autres plates-formes
- Jetez un œil à l'intérieur des fichiers AssemblyInfo pour incrémenter les numéros de version
- Efface certains fichiers qui ne devraient pas être inclus dans les versions / versions
- Libère le code dans les dossiers de déploiement
- Code zippé à des fins de sauvegarde
- Déployer les services Windows; les démarrer et les arrêter
- Etc.
La plupart de ces choses peuvent être effectuées avec NAnt seul, mais nous avons créé quelques tâches d'extension pour que NAnt fasse certaines choses spécifiques à notre environnement. De plus, la plupart de ces processus ci-dessus sont généralisés et réutilisés dans un grand nombre de nos différents scripts de création d'applications, afin de ne pas répéter la logique. Ce n'est donc pas un simple code NAnt, ni de simples scripts de construction. Il existe des dizaines de fichiers NAnt qui se réunissent pour exécuter une génération.
Dernièrement, je n'ai pas été satisfait de NAnt pour deux raisons: (1) sa syntaxe est tout simplement horrible - les langages de programmation au-dessus de XML sont vraiment horribles à maintenir, (2) le projet semble être mort sur la vigne; il n'y a pas eu une tonne de mises à jour récemment et il semble que personne ne soit vraiment à la barre. Essayer de le faire fonctionner avec .NET 4 a causé des problèmes en raison de ce manque d'activité.
Donc, avec tout ce contexte à l'écart, voici ma question. Étant donné certaines des choses que je veux accomplir sur la base de cette liste ci-dessus, et étant donné que je suis principalement dans une boutique .NET, mais que je dois également créer des projets non-NET, existe-t-il une alternative à NAnt que je devrais envisager passer à?
Les choses sur mon radar incluent Powershell (avec ou sans psake ), MSBuild seul et râteau . Ils ont tous des avantages et des inconvénients. Par exemple, MSBuild est-il suffisamment puissant? Je me souviens l'avoir utilisé il y a des années et il ne semblait pas avoir autant de puissance que NAnt. Est-ce que je veux vraiment que mon équipe apprenne Ruby juste pour faire des builds en utilisant le râteau? Psake est-il vraiment suffisamment mature pour qu'un projet puisse épingler mon portfolio? Est-ce que Powershell est "trop proche du métal" et je vais devoir écrire ma propre bibliothèque de build comme psake pour l'utiliser seule?
Y a-t-il d'autres outils que je devrais considérer? Si vous étiez impliqué dans la maintenance d'un portefeuille .NET d'une complexité importante, quel outil de construction envisageriez-vous? Qu'est-ce que votre équipe utilise actuellement?