web-dev-qa-db-fra.com

(MSDeploy) Déploiement du contenu d'un dossier sur un serveur distant IIS Server

Est-il possible de déployer le contenu d'un dossier (fichiers Html simples) vers une application Web spécifique sur un serveur IIS6/7 distant?

La commande suivante ne génère pas d'erreur, mais elle ne publie pas non plus de fichiers sur le serveur distant:

 msdeploy.exe -verb:sync -source:dirPath="c:\myHtmlFiles" -dest:auto,ComputerName="http://deploy.mycompany.co.uk/msdeploy?site=TestSite",includeAcls="false",username="administrator",password="myPassword" -enableRule:DoNotDeleteRule -disableLink:AppPoolExtension -disableLink:ContentExtension -allowUntrusted

REMARQUE:

  • WebDeploy est correctement installé sur le serveur de destination et fonctionne parfaitement avec les packages créés à partir de scripts msbuild pour les projets .NET.
  • ' http://deploy.mycompany.co.uk/msdeploy ' est correct pour le point final d'écoute.
  • La chaîne de requête "? Site = TestSite" a été suggérée ailleurs, mais ne fonctionne pas.
  • L'application Web "TestSite" existe sur le serveur cible.
  • Les fichiers de paramètres et -setParam ne fonctionnent pas et génèrent des erreurs liées à la source qui ne prend pas en charge le paramètre "IIS Web Application Name" si vous essayez de le définir, de le déclarer ou de le fournir.
35
Warren

Je viens d'écrire un article de blog pour répondre à cela à http: //sedodream.com/2012/08/20/WebDeployMSDeployHowToSyncAFolder.aspx . D'après votre question, il semble que vous soyez assez familier avec MSDeploy, donc la réponse pourrait être un peu verbeuse, mais je voulais que les personnes ayant moins de connaissances sur MSDeploy soient capables de comprendre. J'ai collé la réponse ci-dessous.

Web Deploy (aka MSDeploy) utilise un modèle de fournisseur et il existe un bon nombre de fournisseurs disponible dès la sortie de la boîte. Pour vous donner un exemple de certains des fournisseurs; lors de la synchronisation d'une application Web IIS, vous utiliserez iisApp, pour un package MSDeploy, vous utiliserez un package, pour un serveur Web webServer, etc. Si vous souhaitez synchroniser un dossier local avec une télécommande IIS chemin, vous pouvez utiliser le fournisseur contentPath . Vous pouvez également utiliser ce fournisseur pour synchroniser un dossier d'un site Web à un autre site Web.

L'idée générale de ce que nous voulons faire dans ce cas est de synchroniser un dossier de votre PC vers votre site Web IIS. Les appels à msdeploy.exe peuvent être un peu verbeux. Construisons la commande étape par étape. Nous utiliserons le modèle ci-dessous.

msdeploy.exe -verb:sync -source:contentPath="" -dest:contentPath=""

Nous utilisons le verbe de synchronisation pour décrire ce que nous essayons de faire, puis utilisons le fournisseur contentPath pour la source et la destination. Voyons maintenant quelles devraient être ces valeurs. Pour la valeur source, vous devrez transmettre le chemin d'accès complet au dossier que vous souhaitez synchroniser. Dans mon cas, les fichiers sont à C:\temp\files-to-pub. Pour la valeur dest, vous donnez le chemin d'accès au dossier sous la forme d'un chemin IIS. Dans mon cas, le site Web vers lequel je me synchronise s'appelle sayedupdemo. Le chemin IIS que je souhaite synchroniser est ‘sayedupdemo/files-to-pub’. Maintenant ça nous donne.

msdeploy.exe –verb:sync -source:contentPath="C:\temp\files-to-pub" -dest:contentPath='sayedupdemo/files-to-pub'

Pour la valeur dest, nous n'avons donné aucun paramètre indiquant à quel serveur ces commandes sont censées être envoyées. Nous devrons ajouter ces paramètres. Les paramètres qui doivent généralement être transmis sont.

  • ComputerName - c'est l'URL ou le nom de l'ordinateur qui gérera l'opération de publication
  • Nom d'utilisateur - le nom d'utilisateur
  • Mot de passe - le mot de passe
  • AuthType - le authType à utiliser. Soit NTLM ou Basic. Pour WMSvc, il s'agit généralement de Basic, pour Remote Agent Service, il s'agit de NTLM

Dans mon cas, je publie sur un Site Web Windows Azure . Donc, les valeurs que j'utiliserai sont:

Toutes ces valeurs se trouvent dans le fichier .publishSettings (peuvent être téléchargées à partir du tableau de bord du site Web à partir de WindowsAzure.com). Pour la valeur ComputerName, vous devrez ajouter le nom de votre site pour obtenir l'URL complète. Dans l'exemple ci-dessus, j'ai ajouté manuellement ?site=sayedupdemo, Il s'agit du même nom que celui indiqué dans le portail Azure. Alors maintenant, la commande que nous avons est.

msdeploy.exe 
    –verb:sync 
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:contentPath='sayedupdemo/files-to-pub'
            ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
            ,UserName='$sayedupdemo'
            ,Password='thisIsNotMyRealPassword'
            ,AuthType='Basic'

OK nous y sommes presque! Dans mon cas, je veux m'assurer de ne supprimer aucun fichier du serveur pendant ce processus. J'ajouterai donc également –enableRule:DoNotDeleteRule. Donc, notre commandement est maintenant.

msdeploy.exe 
    –verb:sync 
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:contentPath='sayedupdemo/files-to-pub'
            ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
            ,UserName='$sayedupdemo'
            ,Password='thisIsNotMyRealPassword'
            ,AuthType='Basic' 
    -enableRule:DoNotDeleteRule 

À ce stade, avant d'exécuter cette commande, je vais d'abord l'exécuter en passant –whatif. Cela me donnera un résumé de ce que seront les opérations sans provoquer de changements. Lorsque je fais cela, le résultat est affiché dans l'image ci-dessous.

msdeploy result

Après avoir vérifié que les modifications sont toutes intentionnelles, j'ai supprimé le –whatif Et exécuté la commande. Après cela, les fichiers locaux ont été publiés sur le serveur distant. Maintenant que j'ai synchronisé les fichiers à chaque publication, cela entraînera la publication des fichiers modifiés uniquement.

Si vous voulez savoir comment snyc un fichier individuel, vous pouvez voir mon précédent article de blog Comment mettre votre application Web hors ligne pendant la publication.

dest: auto

Dans votre cas, j'ai noté que vous utilisiez dest:auto, Vous pouvez l'utiliser, mais vous devrez passer le nom de l'application IIS comme paramètre et cela remplacera le chemin d'accès au dossier. Voici la commande.

msdeploy.exe 
    -verb:sync
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:auto
        ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
        ,UserName='$sayedupdemo'
        ,Password='thisIsNotMyRealPassword'
        ,AuthType='Basic' 
-enableRule:DoNotDeleteRule 
-setParam:value='sayedupdemo',kind=ProviderPath,scope=contentPath,match='^C:\\temp\\files-to-pub$'
75