Plate-forme de construction automatisée pour le portefeuille .NET - le meilleur choix? [fermé]


10

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?

Réponses:


2

Si vous utilisez déjà TeamCity, vous devriez pouvoir utiliser ses fonctionnalités existantes pour la plupart de vos besoins. Il prend en charge de manière native la création de fichiers Visual Studio .sln et si vous avez besoin de tâches supplémentaires pour tous vos projets, vous pouvez modifier les fichiers .targets du .NET Framework sur vos machines de génération, vous n'avez donc pas à modifier les fichiers csproj individuels.

Il vérifiera automatiquement à partir de Subversion, les artefacts zip, vous permettra de contrôler quels fichiers sont considérés comme des artefacts déployables. La nouvelle version (6.0) autorise également plusieurs étapes de génération, il est donc possible de déployer xcopy des artefacts sur un partage.

Vous pouvez également écrire vos propres applications / tâches qui peuvent s'exécuter dans le cadre d'une build (via le programme d'exécution en ligne de commande) et faire tout ce que vous voulez (comme démarrer / arrêter les processus Windows).


3

Nous abordons les choses comme trois activités différentes, construire, déployer et installer. Nous utilisons TFS pour le serveur de build avec quelques légendes à Powershell. Nous utilisons ensuite Powershell pour accomplir toutes les pièces de déploiement et d'installation qui sont assez complexes et sur plusieurs serveurs locaux et cloud. J'ai été très heureux d'apprendre Powershell sur MSBuild ou un autre outil. J'ai également eu une bonne expérience avec Visual Build dans le passé.


2

Jetez un œil à Hudson et MSBuild en tant que paire. La puissance est fournie avec les puissantes capacités de MSBuild et les plugins hudson .

Par exemple, vous pouvez utiliser hudson et exécuter vos scripts NAnt jusqu'à ce que vous migriez vers MSBuild, puis il peut également exécuter vos scripts MSBuild.

Répondre spécifiquement à vos points:

  • Subversion et étiquetage
  • MSBuild
  • Un coup d'œil dans AssemblyInfo a été demandé sur SO, mais la solution peut ne pas vous plaire
  • MSBuild peut supprimer des fichiers en toute simplicité
  • "Libérer le code dans les dossiers de déploiement" - vous pouvez demander au système de génération de sauter cette étape et de le déployer automatiquement à l'aide d'un certain nombre de méthodes. Ou vous pouvez FTP si vous le souhaitez.
  • MSBuild peut compresser
  • Services Windows, MSBuild est à nouveau votre ami ici.

Merci pour l'info sur MSBuild. Il semble qu'il y ait plus de puissance que la dernière fois que j'ai essayé de l'utiliser. En ce qui concerne Hudson, cela offre-t-il des avantages au-delà de ce que d'autres serveurs CI fournissent, tels que TeamCity, que nous utilisons actuellement? J'essaie d'éviter de perturber trop le statu quo ici, et remplacer notre serveur CI en même temps que nous remplaçons nos scripts de construction semble plus douloureux.
RationalGeek

À mon humble avis, je pense que TeamCity est fantastique ... et hudson est meilleur. Ils peuvent être vus pour exécuter les mêmes fonctions, jusqu'à ce que vous vouliez faire quelque chose de génial - alors hudson gagne. Honnêtement, hudson peut analyser (stylecop / fxcop) -> build-> test-> tag-> sauvegarde locale et hors site-> déployer tout en vous tenant à jour via RSS, SMS, XFD.
Steven Evers

Hmm ... rien dans cette liste n'est impossible avec TeamCity, mais c'est peut-être plus facile avec Hudson. Quoi qu'il en soit, à moins que nous n'atteignions des problèmes avec TC, je ne pense pas que nous changerons de sitôt.
RationalGeek

@jkohlhepp: La difficulté est qu'il existe de nombreuses solutions dans le même espace. À la fin de la journée, Hudson est facile et est 100% gratuit. IIRC, une chose que TC pourrait avoir sur Hudson est la construction multi-agents.
Steven Evers

2

J'utilise Automated Build Studio . Je veux m'en débarrasser.

La seule raison pour laquelle je ne passe pas à 100% MS Build ou Team Foundation Build est le coût que cela impliquera pour reconstruire les scripts qui fonctionnent parfaitement aujourd'hui. Les scripts ne changent pas beaucoup ...

Cependant, pour le prochain produit, ce sera Team Foundation Build sans aucune hésitation pour les principales raisons suivantes (elles sont bien plus):

  • Il est facile à déployer (dernière version: 2010)
  • Il est entièrement intégré à Visual Studio et Team Foundation Server
  • Cela devient un standard comme MS Build
  • C'est gratuit avec Bizspark (pour les startups)

Puisque vous êtes également en .NET, je vous recommande vivement d'utiliser TFB.

Si vous ne pouvez pas demander Bizspark ou ne pouvez pas vous permettre d'acheter la licence, vous pouvez opter pour CruiseControl.NET + MS Build et quelques scripts de support. Dans une grande entreprise de services publics pour laquelle je travaillais, nous avions utilisé CruiseControl.NET pour créer, tester, déployer et signaler tous nos projets. Il comprenait le déploiement automatique des services Web.


Je n'avais pas envisagé cette option, mais je ne pense pas que ce serait une option réaliste pour nous car nous n'utilisons pas du tout TFS, et avons opposé un veto aux tentatives de passer à celle-ci dans le passé (pour des raisons budgétaires et autres). Mais merci pour la suggestion qui est une idée intéressante.
RationalGeek

Ce n'est pas si vaste. Si votre gestion est sensible aux prix, MS Build sera un match parfait. Je travaillais avec MS Build + CruiseControl.NET uniquement et cela fonctionnait très bien! Ajoutera cela dans ma réponse.

@Pierre 303: Par curiosité, pourquoi voulez-vous vous débarrasser d'Automated Build Studio?
RationalGeek

@Pierre 303: Les dépenses de TFS ne sont pas la seule préoccupation. Ma boutique fait partie d'une plus grande entreprise, et ils ont standardisé Subversion et d'autres outils et être "non standard" et aller avec TFS provoque des problèmes politiques.
RationalGeek

@jkohlhepp: ce n'est pas facile à utiliser, ce n'est pas bien intégré à Visual Studio (du moins la version que j'ai) et c'est loin d'être un standard.

2

FinalBuilder peut faire tous les éléments demandés, avec une belle interface graphique et une application serveur de création lancée gratuitement.


2

Je fais actuellement ce que vous faites (c'est-à-dire de la construction au packaging au déploiement) en utilisant MSBuild (> 3000 lignes de scripts). Le CI utilise CruiseControl.Net et j'espère pouvoir passer à TeamBuild à l'avenir. MSBuild est encombrant (programmation en XML) mais il est assez puissant spécialement le traitement par lots et le suivi des dépendances. Il est activement maintenu et amélioré dans les nouvelles versions .Net et est la base du système de construction dans Visual Studio et TFS. Les fichiers de projet Visual Studio sont également des projets MSBuild et je peux me connecter à divers points d'extension. Le pack d'extension MSBuildcomporte de nombreuses tâches supplémentaires et il est très facile de créer vos propres tâches par programmation. Je suggère de réfléchir sérieusement à MSBuild. Dernièrement, j'apprends également PowerShell et je trouve cela facile pour certaines tâches, spécialement dans la phase de déploiement, comme l'installation et la configuration de certificats, IIS, etc.

Modifier le projet MSBuild dans VisualStudio car il comprend la syntaxe et vous donne intellisense.Voici quelques autres bons utilitaires qui vous aideront avec MSBuild.
MSBuild Launch Pad - Pour les extensions de shell
MSBuild SideKicks - Éditez , exécutez et déboguez graphiquement des scripts.


1

Peut-être que vous demandez trop de votre script de build et pas assez de votre serveur de build - avec Team City, vous pourriez facilement avoir des scripts simples qui accomplissent chacune de vos balles, dans la langue ou la pile qui a du sens et utiliser les tâches de construction de TeamCity pour enchaînez les choses comme il convient.


Il semble que la plupart de ces réponses assimilent CI à des scripts de construction. J'avais toujours considéré les scripts de construction comme des outils intelligents, et le serveur CI comme étant la chose qui lance simplement les builds basés sur des déclencheurs. Mais vous avez peut-être raison et j'ai besoin de repenser cela.
RationalGeek

1

Je recommande fortement TeamCity, il est facile à configurer et à installer. MSBuild est préférable à NAnt pour la simple raison que tous les fichiers de projet / solution dans le vs2008 / 2010 sont des fichiers MSBuild techniquement, mais vous pouvez configurer TeamCity avec MSBuild ou NAnt.

Bien sûr, TeamCity vous coûtera. Personnellement, j'ai donné un choix, je préférerais le râteau, tout simplement parce que la friction avec les outils Ruby par rapport à d'autres, même si psake est également un bon candidat.


1
FYI TeamCity est gratuit si vous avez moins de 20 configurations de build et moins de 20 utilisateurs. De plus, si vous êtes un projet open source, vous pouvez leur demander une licence gratuite et illimitée.
RationalGeek

0

Avez-vous pensé à Hudson ? Cela pourrait être un problème, car cela nécessite le serveur d'application Java pour fonctionner, mais je pense que cela pourrait vous permettre d'utiliser votre script NAnt actuel et de le construire en utilisant d'autres outils.


Hudson est plus une plate-forme d'intégration continue, et pas vraiment une plate-forme de construction. Nous avons un serveur CI en place - TeamCity, qui fonctionne très bien avec NAnt. Cependant, les raisons pour lesquelles je veux remplacer NAnt sont parce que la maintenance des scripts NAnt est pénible. L'utilisation des scripts actuels via Hudson ne résout pas ce problème. Merci pour la suggestion, cependant.
RationalGeek

IMHO Hudson est très limité dans ce qu'il fait correctement avec les projets VS. Les extractions ne sont pas liées aux changesets comme vous vous y attendez et en arrière-plan, elles ne font rien d'autre que d'exécuter un fichier de commandes que vous créez via une interface Web et de nombreux plug-ins. Le rapport est plutôt sympa si vous pouvez le faire bien fonctionner.
Bill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.