11
votes

Stop iis 7 Application Pool de Build Script

Comment puis-je arrêter, puis redémarrer un pool d'applications IIS 7 à partir d'un script MsBuild fonctionnant à l'intérieur de TeamCity. Je souhaite déployer nos constructions nocturnes sur un serveur IIS pour les testeurs à la vue.

J'ai essayé d'utiliser AppCMD comme: xxx

... mais j'ai couru Dans les problèmes d'altitude dans Windows 2008, cela m'a arrêté de pouvoir exécuter cette commande de mon processus de construction de TeamCity, car Windows 2008 nécessite une élévation afin d'exécuter AppCMD.

Si je n'arrête pas le pool de candidatures Avant de copier mes fichiers sur le serveur Web, mon script MsBuild ne peut pas copier les fichiers sur le serveur.

a toujours vu quelqu'un d'autre et résolu cette question lors du déploiement de sites Web vers IIS de TeamCity?


0 commentaires

5 Réponses :


0
votes

Vous pouvez essayer de modifier les paramètres de service d'agent de construction pour vous connecter en tant que compte d'utilisateur normal au lieu du système (la valeur par défaut), cela peut être effectué à partir du panneau Contrôle des services (Démarrer | Run | Services.msc).

Si cela n'aide pas, vous pouvez également essayer de configurer l'AppMD pour toujours exécuter élever, voir Ce document pour plus de détails.

Si cette option n'est pas disponible pour AppMD ou cela ne fonctionne toujours pas, vous pouvez désactiver complètement UAC pour cet utilisateur.


2 commentaires

Merci pour les suggestions. appmd est un fichier système afin qu'il semble qu'il ne puisse pas être configuré pour toujours exécuter élever. Je cours sous un compte d'utilisateur dédié, mais il ne parvient toujours pas à contacter le service était lorsque vous essayez d'exécuter AppCMD à partir de mon serveur de construction.


Essayez de désactiver le contrôle de compte d'utilisateur pour l'utilisateur exécutant l'agent de construction. Essayez d'exécuter l'agent à l'aide du fichier .bat au lieu du service.



1
votes

Ceci est la solution de contournement équitable HACKEY, j'ai fini par utiliser:

1) Configurez un compte d'accès limité à votre service pour exécuter en tant que. Depuis que je suis un service Cruisecontrol.net, je vais appeler mon utilisateur 'CCNet'. Il n'a pas de droits d'administration. P>

2) Faites un nouveau compte d'utilisateur local et attribuer au groupe Administrateurs (je l'appellerai 'iis_helper' pour cet exemple). Donnez-lui un mot de passe, et réglez-le pour ne jamais expirer. P>

3) Modifiez les autorisations d'accès IIS_HELPER pour ne pas autoriser la connexion locale ou la connexion de bureau à distance, et tout ce que vous souhaiterez peut-être faire pour verrouiller ce compte.

4) Connectez-vous (localement ou via le bureau distant) comme utilisateur non administrateur, "CCNet" dans cet exemple. p>

5) Ouvrez un terminal de commande et utilisez le ' Commande de Runas pour exécuter tout ce qui doit être exécuté. Utilisez l'option / Savecred. Spécifiez votre nouvel utilisateur administratif. P>

runas /savecred /user:MYMACHINE\iis_helper "\"C:\Windows\System32\inetsrv\appcmd.exe\" start site \"My Super Site\""


1 commentaires

Juste pour élaborer une étape supplémentaire, le «gentil» pensez à utiliser 2 comptes ici est que mon service Cruisecontrol.net ne fonctionne pas comme administrateur, le processus de construction n'est pas en cours d'exécution d'administrateur, les tests d'unité ne fonctionnent pas comme admin, etc. .. Seuls le démarrage / arrêt de IIS est en cours d'exécution comme administrateur et vous ne pouvez pas vous connecter à la case localement ou via un bureau distant à partir d'un autre compte. Je trouve cela assez sécurisé ... et bien mieux que de désactiver UAC ou de gérer l'ensemble du processus d'administrateur.



0
votes

Vous allez. Vous pouvez l'utiliser à partir de cc.net avec Nant ou juste avec Nant:

http://nantcontrib.sourceforge.net/release/latest /Help/tasks/iisapppool.html


0 commentaires

7
votes

the MSBUILD Community Tasks comprend une ApplicController qui semble faire ce que vous voulez (bien que l'a noté est daté et à l'heure seulement supporte IIS6.) Exemple: xxx

Notez que vous pouvez également fournir un nom d'utilisateur et un mot de passe si nécessaire.

EDIT: vient de remarquer que le EXTENSION MSBUILD a une tâche IIS7AppPool probablement plus appropriée.


2 commentaires

Seul pris en charge pour IIS 6 pas pour IIS7


@Adam - ah ... n'avait pas vu cela dans la documentation. On dirait que l'iisversion Enum a les versions prises en charge, qui comprend seulement 4-6 actuellement.



7
votes

Ce Article décrit à l'aide d'un fichier HTM nommé App_offline.htm pour prendre un site hors ligne. Une fois que les IIS détectent ce fichier à la base d'un répertoire d'applications Web,

ASP.NET 2.0 Arrêter l'application, déchargera l'application domaine du serveur et arrêtez de traiter toutes les nouvelles demandes entrantes pour cette application. P> blockQquote>

in app_offline-htm, vous pouvez mettre un message convivial indiquant que le site est actuellement sous toute maintenance. p>

Jason Lee Affiche les appels MSDeploy que vous devez avoir besoin de Utilisez (plus beaucoup plus sur l'intégration de ces étapes dans vos scripts de construction!). P>

MSDeploy 
-verb:delete 
-dest:contentPath="name_of_site/App_offline.htm",computerName="computer_name",
username=user_with_administrative_priviliges,password=passwort


1 commentaires

Cela fonctionne toujours bien! Je l'utilise pour déployer un site de base .NET à partir d'un serveur de construction avec Microsoft Web Deploy V3.