Nous avons récemment mis à niveau notre site Web ASP.NET vers une application Web et nous sommes choqués par le saut soudain de difficulté lors de son déploiement. Compte tenu de la fréquence de cette tâche, je me demandais quels plug-ins / logiciels les gens utilisent pour déployer un projet évoluant rapidement et stocké à distance (c'est-à-dire un site Web)?
Il doit y avoir un meilleur moyen que de simplement "publier" dans Visual Studio et de devoir ensuite FTP manuellement les fichiers qui ont changé? Notamment parce que le site tombe en panne lorsque nous téléchargeons nos fichiers .DLL.
Il y a tellement d'exceptions de fichiers délicates que je devrais plutôt automatiser le processus autant que possible, pour éviter les téléchargements accidentels.
Avec notre ancienne solution (sur notre site Web), nous avons utilisé Dispatch for ASP qui a totalement basculé et a fait tout le processus en un seul clic. Malheureusement, ce n'est pas idéal pour les DLL (comme mentionné précédemment).
Alors, comment fait votre équipe?
Merci pour tout conseil.
PS - J'ai lu que Visual Studio 2010 est censé combler ces lacunes dans VS2005 / 08, mais jusque-là ...
la source
Réponses:
Je recommande fortement d'utiliser l'intégration continue.
Nous utilisons une combinaison de TeamCity pour CI, Rake et Albacore pour automatiser la construction.
TeamCity vérifiera le code de votre référentiel de code source, puis, en utilisant Rake, construira l'application, exécutera des tests unitaires et même exécutera vos scripts de base de données si vous le souhaitez. Après une construction réussie, vous pouvez empaqueter votre code source dans un fichier zip ou le copier vers la destination de votre choix.
Nous utilisons Git, bien que TeamCity fonctionne avec tous les systèmes de contrôle de source.
L'utilisation de TeamCity et de Rake serait similaire à l'utilisation de CruiseControl et NANT, sans modification du fichier XML. Bien sûr, vous pouvez utiliser TeamCity avec NANT si vous préférez.
Un court échantillon extrait d'un rakefile.rb qui effectue la construction. À mon humble avis, plus facile à lire et à déboguer qu'un fichier XML.
Albacore est une suite de tâches Rake spécialement conçues pour déployer une application .NET.
la source
Sous Linux, j'ai utilisé fabric (fabfile.org) et capistrano (capify.org) qui sont des outils d'automatisation pour aider aux commandes SSH et SCP à distance. Si Cygwin est installé sur vos hôtes Windows, vous devriez pouvoir les réutiliser comme outils de déploiement.
la source
La «publication» d'une application Web dans Visual Studio peut être exécutée à partir de la ligne de commande en tant que
msbuild "C:\proj\yourprojectpathandfilename.csproj" /deploydir:"C:\some\deploy\dir"
. Le répertoire de destination est une application Web déployable.Les autres réponses couvrant votre question plus large sont bonnes. J'ajouterais également que vous devriez examiner plusieurs projets d'applications Web open source et copier le processus de construction que vous aimez le plus.
la source
Je suis d'accord avec Scott que cela peut être très compliqué et facilement ignoré. La stratégie de déploiement est également très spécifique à l'application. Si votre application est complètement autonome dans un dossier, cela pourrait être plus facile qu'une application qui fait référence au GAC. Ce qui à son tour pourrait être encore plus facile qu'un serveur qui a besoin de maintenir plusieurs versions d'une application qui fait référence à plusieurs versions des assemblys GAC. Nous ne voulons pas commencer à parler des fichiers de stratégie ici :).
Cela dit, la combinaison de l' outil de déploiement Web Microsoft avec le routage des demandes d' application est une bonne option. Dans IIS7, il est possible de créer des packages d'installation à l'aide de l'outil. Il est également possible de pointer l'outil vers une application Web et de sauvegarder l'intégralité de l'application dans un dossier d'archive d'application. Vous pouvez ensuite déployer ce dossier d'archive sur un serveur Web IIS6 ou IIS7 (IIS5 non pris en charge). J'utiliserais le routage de demande d'application comme Scott l'a suggéré pour séparer les sites Web en direct des tests. Une fois que vous avez vérifié que le site Web nouvellement publié est bon, vous pouvez configurer ARR pour qu'il achemine vers la nouvelle version.
la source
PyroBatchFTP fonctionne très bien pour cela. Il poussera uniquement les modifications et vous pourrez le scripter afin de pouvoir pousser avec un double-clic sur un fichier batch.
Chez Vaasnet, nous avons configuré la solution de rêve pour nous-mêmes, mais il est assez compliqué à installer, mais cela vaut la peine d'utiliser certains ou tous ces éléments si vous le pouvez. Voici ce que c'est:
Ainsi, le résultat net nous permet de vérifier dans SVN et de le faire automatiquement construire et pousser à la production sans aucune interaction manuelle. Après avoir testé notre URL de transfert et déterminé qu'elle est prête à être mise en ligne, nous nous connectons à un site simple et en 1 clic, elle est en ligne.
la source
Pour une autre manière qui n'a pas été suggérée, je vous renvoie aux projets «Gu» et de configuration Web
Cela crée essentiellement un programme d'installation MSI pour votre application .NET. Cet exemple est pour VS2005, mais j'ai VS2010 et le type de projet est toujours là. Cela peut vous donner beaucoup de personnalisation si vous en avez besoin, ou simplement l'installation de base si vous n'en avez pas.
Personnellement, là où je travaille, nous faisons juste un déploiement de style xcopy, mais j'aimerais finalement remettre un paquet au groupe de serveurs, en leur donnant le contrôle quand et comment il est déployé. (Je pense que cela pourrait également faciliter les déploiements de masse en utilisant quelque chose comme la stratégie de groupe, mais je ne suis pas trop familier avec cela)
la source
Il existe de nombreuses façons d'habiller ce chat, cela dépend vraiment de l'accès que vous pouvez avoir sur votre serveur. Ma méthode préférée récemment est de configurer un script de construction dans le projet (généralement en utilisant MSBUILD) qui empaquette tous les fichiers de déploiement, puis utilise SVN pour les relier à la production. Et pour versionner les fichiers de production.
Au niveau de la base de données, le meilleur pari est d'utiliser une sorte de cadre de migration. Encore une fois, un tas de ceux qui courent et aucune vraie réponse claire.
la source
Personnellement, j'utilise simplement un script vbs que j'ai écrit moi-même pour copier des dossiers de types de fichiers spécifiques sur le serveur de développement (c.-à-d. Exclure les fichiers cs, etc.).
la source
Lorsque j'ai travaillé dans une grande entreprise .com, c'est ce que nous avons fait avec nos déploiements .net.
Tous nos codes source et procédures stockées ont été stockés dans SVN. Chaque nuit, un travail de base de données s'exécute et extrait les proc stockés en production et les glisse dans un répertoire sur SVN afin qu'il y ait toujours une version la plus récente dans le contrôle de source.
Le jour du déploiement d'un projet, nous utiliserions un script nAnt pour extraire les projets de SVN, effectuer une construction personnalisée des projets et extraire toutes les dépendances dont ces projets avaient besoin. Une fois le script nAnt exécuté, il a été empaqueté dans un fichier zip auto-extractible. Les proc stockés qui étaient associés à ce déploiement ont été archivés dans le contrôle de code source et une feuille de présentation Excel a été mise à jour avec les scripts à exécuter et dans quel ordre.
Lorsque le deploymenet s'est éteint, le fichier zip auto-extractible a été transféré vers le serveur où il a été lancé. Tous les fichiers ont été extraits dans les répertoires appropriés et le DBA a exécuté les proc stockés sur la base de données de production.
Sur un déploiement typique utilisant ce système, nous sommes passés d'un déploiement de cinq à six heures à moins d'une heure ou moins.
Bonne chance et j'espère que cela aidera certains à trouver un moyen de déployer votre application.
la source
Le rasoir d'Occam est généralement l'approche préférée: le plus simple, le mieux. FTP est facile avec peu ou pas de complications. Certaines personnes utilisent XCOPY, Filezilla ou WSFTP, d'autres peuvent utiliser l'outil de déploiement Web MS (que je ne connais pas encore), mais dans l'ensemble, il existe une meilleure façon de déployer des applications Web ASP.NET (et d'autres applications en général). IMO, si le déploiement est pris en considération dès le début du développement, le déploiement peut être intégré à l'application Web, ce qui permet un déploiement relativement indolore et sans heurt à l'avenir.
En tant que développeur .NET qui a travaillé dans plusieurs sociétés développant des applications Web ASP.NET de taille, de complexité et de nombre d'utilisateurs (de plusieurs centaines d'utilisateurs à des dizaines de milliers), le «déploiement» de l'OMI est souvent le sujet le plus «fluide». Certaines organisations vont trop loin en termes de bureaucratie tandis que d'autres ne résolvent aucun problème de déploiement. D'après mon expérience, les problèmes de déploiement ont tendance à tomber dans 1 ou plusieurs des 3 catégories en termes de difficultés / échecs:
Le déploiement est ignoré / oublié en profondeur pendant la phase de conception: la plupart des applications Web ont tendance à incorporer un serveur Web et une base de données. Au-delà du code d'application, peut-être de certaines procédures stockées et de tables de base de données, le déploiement n'a pas besoin de beaucoup de réflexion. ASP.NET est plus que capable d'aider dans le déploiement , mais le plus souvent les développeurs sont distraits en termes d'obtenir l'application réelle en cours d' exécution et faire tâche de tout en laissant la façon de déploiement comme une question distincte.
Le déploiement est complexe sur plusieurs systèmes et personnes en jeu: la complexité est une chienne. Depuis MSMQ, les procédures stockées et déclencheurs T-SQL, Reporting Services, la messagerie SOAP / XML, l'authentification AD, SSAS / SSIS, etc., etc., le nombre de technologies en jeu augmente le nombre de personnes impliquées. Pire encore, tous ces différents composants sont généralement gérés par différentes entités au sein d'une organisation. À moins que tout le monde ne soit synchronisé les uns avec les autres, les déploiements peuvent rapidement devenir plus complexes et entraîner de multiples points de défaillance.
Paresse, apathie ou manque de communication et / ou de gestion: de peu ou pas de documentation au manque de communication et de protocole coordonnés, il est facile de bousiller un processus relativement simple. Le déploiement devrait être une procédure simple avec de nombreuses vérifications en place tout en documentant ce qui est fait, mais souvent ce n'est jamais le cas. La plupart des gens veulent juste que ce putain de site soit en marche. D'après mon expérience, les gens (non-programmeurs) ne se soucient pas vraiment tant que quelque chose ne va pas vraiment . La responsabilité incombe rarement à une seule personne pour effectuer le déploiement, car personne ne veut vraiment être la raison de l'échec, de sorte que la responsabilité est généralement dispersée.
Je ne connais aucun fournisseur disponible pour automatiser le déploiement, bien que je ne serais pas surpris s'il y en avait quelques-uns. Vous pouvez probablement créer un script pour une solution via VBScript / WMI ou un script par lots pour une solution, mais la réalité est que vous devez adapter une solution ensemble pour des sites ASP.NET plus complexes. Sites simples composés de pages, de connectivité à la base de données et rien d'autre, vous n'avez pas besoin d'en faire autant pour adapter vos efforts de déploiement à la complexité de l'application elle-même.
Jusqu'à présent, dans mon travail actuel, le déploiement se fait toujours via FTP et déplace un tas de fichiers. C'est moche, facile à foutre et il n'y a aucun sens d'une histoire précise. Certes, vous pouvez passer au peigne fin les journaux FTP, personne ne dérange vraiment de le faire. Nos applications sont assez simples sans grand besoin de FTP. La façon dont mon équipe déploie nos applications Web ne vous est d'aucune utilité. Au lieu de cela, je préfère profiter de cette occasion pour suggérer de meilleures pratiques.
Je me rends compte que ce message pourrait être exagéré pour la question qui a été initialement posée. Malheureusement, le déploiement n'est tout simplement pas une chose simple car les applications peuvent varier en complexité. Je parierais que la plupart des organisations qui déploient des applications ASP.NET complexes ont au fil du temps développé certaines stratégies de travail (au moins) de manière fiable.
la source