Comment puis-je obtenir que TFS2010 exécute MSDEPLOY pour moi via MSBUILD?

Il existe une excellente présentation PDC de Vishal Joshi qui décrit les nouvelles fonctionnalités MSDEPLOY dans Visual Studio 2010 – ainsi que la façon de déployer une application dans TFS. (Il y a aussi une bonne discussion de Scott Hanselman mais il ne va pas dans les TFS).

Vous pouvez utiliser MSBUILD dans TFS2010 pour appeler MSDEPLOY afin de déployer votre package sur IIS. Cela se fait au moyen des parameters de MSBUILD.

L’exposé explique certains des parameters de la ligne de commande tels que:

/p:DeployOnBuild /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=InProc /p:MSDeployServiceURL=localhost /p:DeployIISAppPath="Default Web Site" 

Mais où est la documentation pour cela – je n’en trouve pas?

J’ai passé toute la journée à essayer de faire en sorte que cela fonctionne et je n’arrive pas à bien faire les choses et à finir avec diverses erreurs. Si je lance le fichier cmd du paquet, il se déploie parfaitement. Si je lance WebDeploy via Visual Studio, cela fonctionne également parfaitement.

Mais je veux que tout le déploiement s’exécute via msbuild utilisant ces arguments et non un appel séparé à msdeploy ou en exécutant le fichier .cmd du package. Comment puis-je faire ceci?

PS Oui, le Web Deployment Agent Service cours d’exécution. J’ai également le service de gestion en cours d’exécution sous IIS. J’ai essayé d’utiliser les deux.


Args j’utilise:

 /p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:Configuration=Release /p:CreatePackageOnPublish=True /p:DeployIisAppPath=staging.example.com /p:MsDeployServiceUrl=https://staging.example.com:8172/msdeploy.axd /p:AllowUntrustedCertificate=True 

me donnant :

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets (2660): Échec de VsMsdeploy (agent distant (URL https://staging.example.com: Impossible de contacter 8172 / msdeploy.axd? Site = staging.example.com . Assurez-vous que le service d’agent distant est installé et démarré sur l’ordinateur cible.) Détail de l’erreur: Agent distant (URL https: //staging.example. com: 8172 / msdeploy.axd? site = staging.example.com ) n’a pas pu être contacté. Assurez-vous que le service d’agent distant est installé et démarré sur l’ordinateur cible. Une réponse non prise en charge a été reçue. L’en-tête de réponse ‘MSDeploy.Response’ était ” mais ‘v1’ était attendu. Le serveur distant a renvoyé une erreur: (401) Unauthorized.

IIS7 + réponse connexe ….

Ok, voici ce que j’ai fini par faire. Plus ou moins, en suivant le post de Simon Weaver dans cette discussion / question.

Mais en ce qui concerne les parameters MSBuild .. la plupart des gens utilisent le paramètre suivant: /p:MSDeployPublishMethod=RemoteAgent qui n’est pas /p:MSDeployPublishMethod=RemoteAgent pour IIS7. L’utilisation de ce paramètre signifie que TFS essaie de se connecter à l’url: https://your-server-name/MSDEPLOYAGENTSERVICE Mais pour accéder à cette URL, l’utilisateur à authentifier doit être un administrateur. Qui est froncée (Et vous devez avoir coché la règle Admin-Override). Je pense que cette URL est pour IIS6.

Voici le message d’erreur standard lorsque vous essayez de vous connecter avec RemoteAgent: –

Standard 401 Frak Off u suck RemoteAgent, erreur

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets (3588): échec de la tâche de déploiement Web (agent distant (URL http: // your-web- impossible de contacter le serveur / MSDEPLOYAGENTSERVICE Assurez-vous que le service d’agent distant est installé et démarré sur l’ordinateur cible. Assurez-vous que le nom du site, le nom d’utilisateur et le mot de passe sont corrects. Si le problème n’est pas résolu, contactez votre administrateur local ou serveur. Détails de l’erreur: Impossible de contacter l’agent distant (URL http: // votre serveur Web / MSDEPLOYAGENTSERVICE ). Assurez-vous que le service d’agent distant est installé et démarré sur l’ordinateur cible. Une réponse non prise en charge a été reçue. L’en-tête de réponse ‘MSDeploy.Response’ était ‘V1’ mais ‘v1’ était attendu. Le serveur distant a renvoyé une erreur: (401) Unauthorized.

Donc .. vous devez changer votre MSDeployPublishMethod à ceci:

 /p:MSDeployPublishMethod=WMSVC 

Le WMSVC signifie Windows Manager Service. Il s’agit fondamentalement d’un nouveau wrapper sur l’agent distant, mais nous permet maintenant de corriger la fourniture d’un nom d’utilisateur et d’un mot de passe .. où l’utilisateur n’a pas besoin d’être un administrateur! (joie!) Alors maintenant, vous pouvez corriger les utilisateurs auxquels vous souhaitez avoir access .. par site Web ..

entrer la description de l'image ici

Il essaye maintenant de bash l’url: https://your-web-server:8172/MsDeploy.axd <- qui est exactement ce que fait la fenêtre de Publish Visual Studio 2010! (OMG -> PENNY DROPS !! BOOM!)

entrer la description de l'image ici

Et voici mes derniers parameters MSBuild:

 /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MSDeployPublishMethod=WMSVC /p:MsDeployServiceUrl=your-server-name /p:DeployIISAppPath=name-of-the-website-in-iis7 /p:username=AppianMedia\some-domain-user /p:password=JonSkeet<3<3<3 /p:AllowUntrustedCertificate=True 

Notez que le nom d'utilisateur contient le nom de domaine? Tu as besoin de ça, là-bas. De plus, dans ma photo, j'ai permis à nos UTILISATEURS DE DOMAINE d'accéder au site Web pour la gestion. En tant que tel, mon nouveau compte d'utilisateur que j'ai ajouté (TFSBuildService) est membre du groupe Domain Users du Domain Users ... c'est ainsi que tout fonctionne.

Maintenant, si vous avez lu tout cela, ayez un lolcat (car ils sont SOOOOOOOO 2007) ....

entrer la description de l'image ici

Voici les étapes qui ont finalement fonctionné pour moi. Je voulais travailler avec RemoteAgent, mais je ne pouvais pas le faire, peu importe ce que je tentais.

Vous n’avez pas à faire exactement comme ça, mais c’est comme ça que je l’ai fait fonctionner

  • Configurer WMSVC
  • Assurez-vous que le service est démarré
  • Configurez un utilisateur IIS (cliquez sur TOP MOST SERVERNAME dans IIS) et accédez à «Utilisateurs du gestionnaire IIS». Je suggère de le rendre différent de votre nom Windows.
  • Assurez-vous que le compte d’utilisateur pour WMSVC (LOCAL SERVICE pour moi) dispose d’permissions d’écriture sur le répertoire IIS que vous utilisez
  • Dans mon cas, j’utilise un certificate SSL (même s’il frappe localhost).

Rappelez-vous que tous les arguments de MSBUILD ont été ajoutés à la définition de la génération TFS.

 /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MSDeployPublishMethod=WMSVC /p:MsDeployServiceUrl=https://staging.example.com:8172/msdeploy.axd /p:username=sweaveriis /p:password=abcd1234 /p:DeployIisAppPath=staging.example.com/virtual_directory_name /p:AllowUntrustedCertificate=True 

Remarque: staging.example.com est en fait la zone locale avec une entrée de fichier hosts pointant vers 127.0.0.1. Localhost travaillerait probablement aussi ici.

Articles utiles:

Résolution des problèmes liés à MSDeploy

Plus de dépannage