Jenkins pour automatiser le déploiement des applications ASP.NET

13

Existe-t-il une possibilité d'automatiser / semi-automatiser les déploiements d'applications Web ASP.NET à l'aide de Jenkins. Il peut être placé dans des environnements contrôlés ou non contrôlés, car les utilisateurs non contrôlés doivent saisir l'ID utilisateur et le mot de passe. Je cherche des moyens de copier les fichiers de la cible vers la destination et d'exécuter des scripts SQL dans un scénario de batterie de serveurs Web.

Modifier Actuellement, nous utilisons des fichiers bat pour xcopy / configurer le pool d'applications / sql cmd, etc. pour déployer l'application. Mais pour que cela fonctionne, l'équipe d'assistance à la production doit télécharger le code source, créer le projet et exécuter les fichiers bat pour déployer l'application.

Maintenant, nous voulons automatiser le déploiement sans que l'utilisateur ne télécharge le code source et l'utilisateur final a juste besoin de visiter une URL et de remplir les paramètres d'ID utilisateur et de mot de passe et de sélectionner la balise svn et elle devrait être déployée. Mais Jenkins s'exécute sous une connexion anonyme, donc le fichier bat existant ne fonctionnera pas car il n'a pas les autorisations pour exécuter le script.

Je voudrais donc savoir s'il existe des alternatives pour ce genre de situation. Ce sera bien si le contexte utilisateur est emprunté en utilisant l'ID utilisateur et le mot de passe saisis permettant au fichier de commandes existant de s'exécuter sans autres modifications. Si ce n'est pas possible, nous aimerions également explorer d'autres idées, mais nous n'avons pas la possibilité de choisir un outil automatisé comme la marionnette, etc., nous devons rester avec ces fichiers de commandes.

Ensoleillé
la source
Partager vos recherches aide tout le monde. Dites-nous ce que vous avez essayé et pourquoi cela n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de réitérer des réponses évidentes et, surtout, cela vous aide à obtenir une réponse plus spécifique et pertinente. Voir aussi Comment demander
moucher
Mettez à jour ma question, faites-moi savoir si je dois fournir des informations supplémentaires.
Sunny

Réponses:

11

Je vais partager ce que nous avons utilisé et où nous prévoyons d'aller, peut-être que cela vous aidera à vous donner une meilleure idée.

  • Nous utilisons actuellement Jenkins et Github ensemble - une fois que quelque chose est fusionné dans master, Github dit à Jenkins et cela démarre une construction.
  • Nous utilisons un script Nant sur Jenkins pour construire le projet, exécuter des tests unitaires, et si tout semble bon, il lance un autre projet Jenkins. Le script Nant crache également un répertoire avec du code entièrement compilé / CSS / JS minimisé, etc.
  • Le projet Jenkins secondaire prend la sortie de la build et la renvoie à Github, sur un référentiel séparé.
  • Un fichier .BAT s'exécute toutes les 5 minutes sur le serveur Web intermédiaire, et il vérifie essentiellement les mises à jour de ce référentiel. Si une mise à jour est trouvée, nous téléchargeons la dernière version, sauvegardons nos fichiers de transfert, puis déployons la nouvelle version dans le dossier de transfert.
  • Pour être en ligne, nous avons un fichier .BAT qui gère la sauvegarde des fichiers en direct et la copie des fichiers de référentiel sur les fichiers en direct. Il est exécuté manuellement. Il ne gère pas les mises à jour SQL (nous les faisons à la main).

Maintenant, évidemment, ce n'est pas totalement idéal, mais cela fonctionne pour nous. Nous voulons étendre cela à l'avenir pour:

  • Utiliser Web Deploy pour pousser les fichiers de Jenkins directement vers IIS et effectuez toutes les autres commandes que nous devons exécuter.
  • Utilisez les migrations automatiques (une fonctionnalité d'Entity Framework) pour gérer toutes les mises à jour SQL, dans le cadre de la mise en ligne.
Nicolas
la source
C'est presque la même chose que nous suivons. Mais, je me demandais si Web Deploy pouvait installer des services Windows, etc. et tout ce qui était nécessaire pour des applications Web complexes. Actuellement, nous utilisons des outils ps et cela fonctionne bien. Pour DB, nous prévoyons d'utiliser l'outil DeployDB.
Sunny
Comment gérez-vous les situations où IIS verrouille des fichiers? Comment gérez-vous les situations où quelqu'un travaille avec votre application. Avez-vous plusieurs nœuds ou interrompez-vous simplement l'application pour les utilisateurs travaillant au moment de la publication?
Piotr Perak
1
@Peri - J'ai oublié de mentionner dans ma réponse d'origine, mais nous prévoyons d'avoir deux serveurs de production et de basculer entre eux si nécessaire (en utilisant IIS ou nginx). Cela nous permettra de «réchauffer» l'autre serveur en direct lorsque le déploiement se produit, puis de basculer sur celui-ci, il ne devrait donc pas y avoir de temps d'arrêt notable.
Nicholas
4

J'utilise déjà Jenkins pour les applications .Net et TFS.

  1. Ajoutez la configuration requise dans votre projet et la transformation et archivez le code.
  2. Obtenez les dernières nouvelles de TFS (utilisez le plug-in TFS)
  3. Générez le projet (utilisez le plug-in MSBuild). vous pouvez publier le code à partir de Msbuild en utilisant des arguments de ligne de commande.
  4. Synchronisez le code de l'emplacement de publication vers la destination à l'aide de la commande msdeploy.exe (située dans "C: \ Program Files (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe")
  5. Vous pouvez également envoyer des e-mails et effectuer la sauvegarde via Jenkins.

Vous pouvez également utiliser MSTest.exe pour exécuter le test unitaire et l'afficher sur la console jenkin ou publier également le résultat du test.

Sanjeev Kumar
la source