2010-11-25 6 views
4

Je me bats pour que les transformations web.config fonctionnent avec des builds automatisés.Problème avec Team Build 2010 et la transformation web.config

Nous avons une solution raisonnablement grande, contenant une application Web ASP.NET et huit bibliothèques de classes. Nous avons trois développeurs travaillant sur le projet et, jusqu'à présent, chacun a "publié" la solution dans un dossier local puis a utilisé la copie de fichier pour le déployer sur un serveur de test. Je tente de mettre en place une solution de génération/déploiement automatisée à l'aide de TFS 2010.

J'ai créé une définition de génération et ajouté un appel à msdeploy.exe dans le modèle de processus de génération pour que l'application soit déployée sur le serveur de test. . Jusqu'ici tout va bien! J'ai ensuite essayé d'implémenter les transformations web.config et je n'arrive pas à les faire fonctionner. Si je compile et publie localement sur mon PC, le dossier "publish" a le fichier web.config correct et transformé.

En utilisant la construction d'équipe, la transformation ne se produit tout simplement pas, et j'ai juste le fichier web.config de base.

J'ai essayé d'ajouter une étape de post-construction dans le dossier du projet d'application Web, comme d'autres l'ont suggéré, semblable à:

<target name="AfterBuild"> 
<TransformXml Source="Web.generic.config" 
      Transform="$(ProjectConfigTransformFileName)" 
      Destination="Web.Config" /> 
</target> 

mais échoue beacuse le fichier web.config source a une section "applicationSettings" . J'ai l'erreur

Impossible de trouver les informations de schéma pour l'élément 'applicationSettings'.

Je l'ai vu suggstions ajouter autour des arguments à la tâche MSBuild dans la définition de la construction comme

/t:TransformWebConfig /p:Configuration=Debug 

Mais cela tombe sur le moment où les projets de bibliothèque de classe sont construites, probablement parce qu'ils ne disposent pas d'un web fichier .config.

Des idées? Comme d'autres, j'ai pensé que cela «fonctionnerait», mais apparemment pas. C'est la dernière partie dont j'ai besoin pour travailler et ça me rend fou. Je ne suis pas un expert msbuild, si simple et s'il vous plaît!

Merci d'avance.

Doug

Répondre

3

Je viens de passer par là. Notre construction était un peu plus compliquée dans la mesure où nous avons 8 bibliothèques de classes et 9 applications web dans une seule solution. Mais le flux est le même.

Tout d'abord se débarrasser de votre cible après construction. Tu n'auras pas besoin de ça.

Vous devez utiliser le service MSDeployPublish. Cela nécessitera qu'il soit installé et configuré correctement sur le serveur de destination. Consultez les liens suivants pour plus d'informations sur cette partie:

Notez que le serveur en question DOIT être configuré correctement avec les droits d'utilisateur corrects. Les sites suivants m'ont aidé à le configurer correctement.

http://william.jerla.me/post/2010/03/20/Configuring-MSDeploy-in-IIS-7.aspx
http://vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html
How can I get TFS2010 to run MSDEPLOY for me through MSBUILD?

La partie suivante exige que votre définition de construction ont les paramètres MSBuild corrects mis en place pour faire la Publish. Ces paramètres sont entrés dans la ligne Process> 3.Advanced> MS Build Arguments de la définition de construction. Voici un indice:

(don't change the following for any reason) 
/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:CreatePackageOnPublish=False 
/p:MSDeployPublishMethod=WMSVC 
/p:SkipExtraFilesOnServer=True 
/p:AllowUntrustedCertificate=True 

(These control where it's going) 

/p:MSDeployServiceUrl="https://testserver.domain:8172/msdeploy.axd" 
/p:UserName=testserver\buildaccount 
/p:Password=buildacctpassword 
/p:DeployIisAppPath="MyApp - TESTING" 

Il est évident que l'utilisateur devra être configuré dans IIS sur le serveur cible pour être autorisé l'accès à cette axd (voir les liens précédents). Et le IisAppPath est le nom du site Web sur le serveur cible.

Vous n'aurez rien de spécial à faire pour les transformations de configuration, car la construction elle-même prendra soin de cela pour vous. Il suffit d'avoir le bon réglage dans la ligne à Process> 1. Obligatoire> Éléments à construire> Configurations à construire.

+1

Juste une note de côté. Il y avait deux parties difficiles dans tout cela. Le premier consistait à installer MSDeployService correctement sur le serveur Web. La seconde consistait à trouver tous les bons paramètres de MSBuild. Certains de ces sites mentionnés par Doug visent à construire et déployer sur la même machine afin que leurs paramètres ne fonctionnent pas. Dans l'ensemble, le premier passage m'a pris environ 6 heures pour comprendre. Maintenant qu'il est configuré, je peux créer une nouvelle définition de construction en 5 minutes environ. – NotMe

+0

Great post Chris, j'ai également travaillé à travers tout cela (m'a pris un peu plus longtemps en partie à cause de certaines bizarreries sur le serveur, en partie à cause de l'utilisation de tfs hébergés), mais vraiment bon résumé du sujet. Chrs. – MemeDeveloper

+0

Autre remarque: j'ai mis cela sur un nouveau serveur la semaine dernière. Le dernier programme d'installation pour MSDeploy est BEAUCOUP meilleur que le précédent. – NotMe

1

Au lieu d'essayer de faire le Déployez en ajoutant des tâches moi-même dans le modèle de processus de construction, j'ai suivi des conseils en post here blog de Vishal Joshi.

Maintenant, le projet entier est construit et déployé et les transformations web.config fonctionnent également. Brillant!

J'ai maintenant un autre problème à résoudre! L'application Web référence les services Web et le processus de génération génère une DLL XmlSerializers. Cependant, bien que cela soit construit correctement, il n'est pas déployé sur l'hôte Web. Je pense que cela a besoin d'un nouveau poste!

Doug

+0

J'ai trouvé la réponse à mon problème XmlSerializers ici http://stackoverflow.com/questions/3636103/tfs-2010-creating-net-4-0-xmlserializers-dll-for-net-3-5-application – Doug

Questions connexes