Déploiement de packages web

par Jason Lee

Cette rubrique décrit comment publier des packages de déploiement web sur un serveur distant à l’aide de l’outil de déploiement web Internet Information Services (IIS) (Web Deploy) 2.0.

Il existe deux main façons de déployer un package web sur un serveur distant :

  • Vous pouvez utiliser directement l’utilitaire de ligne de commande MSDeploy.exe.
  • Vous pouvez exécuter le fichier [nom du projet].deploy.cmd généré par le processus de génération.

Le résultat final est le même, quelle que soit l’approche que vous utilisez. Essentiellement, tout ce que le fichier .deploy.cmd fait est d’exécuter MSDeploy.exe avec des valeurs prédéterminées, de sorte que vous n’avez pas à fournir autant d’informations pour déployer le package. Cela simplifie le processus de déploiement. D’autre part, l’utilisation directe de MSDeploy.exe vous offre beaucoup plus de flexibilité sur la façon exacte de déployer votre package.

L’approche que vous utilisez dépend de divers facteurs, notamment la quantité de contrôle dont vous avez besoin sur le processus de déploiement et si vous ciblez le service Web Deploy Remote Agent ou le gestionnaire Web Deploy. Cette rubrique explique comment utiliser chaque approche et identifie quand chaque approche est appropriée.

Les tâches et les procédures pas à pas de cette rubrique supposent que :

L’exécution du fichier [nom du projet].deploy.cmd est le moyen le plus simple de déployer un package web. En particulier, l’utilisation du fichier .deploy.cmd offre ces avantages par rapport à l’utilisation directe de MSDeploy.exe :

  • Vous n’avez pas besoin de spécifier l’emplacement du package de déploiement web. Le fichier .deploy.cmd sait déjà où il se trouve.
  • Vous n’avez pas besoin de spécifier l’emplacement du fichier SetParameters.xml ; le fichier .deploy.cmd sait déjà où il se trouve.
  • Vous n’avez pas besoin de spécifier les fournisseurs MSDeploy source et de destination. Le fichier .deploy.cmd sait déjà quelles valeurs utiliser.
  • Vous n’avez pas besoin de spécifier les paramètres d’opération MSDeploy : le fichier .deploy.cmd ajoute automatiquement les valeurs couramment requises à la commande MSDeploy.exe.

Avant d’utiliser le fichier .deploy.cmd pour déployer un package web, vous devez vous assurer que :

  • Le fichier .deploy.cmd , le [nom du projet]. SetParameters.xml fichier et le package web ([nom du projet].zip) se trouvent dans le même dossier.
  • Web Deploy (MSDeploy.exe) est installé sur l’ordinateur qui exécute le fichier .deploy.cmd .

Le fichier .deploy.cmd prend en charge différentes options de ligne de commande. Lorsque vous exécutez le fichier à partir d’une invite de commandes, il s’agit de la syntaxe de base :

[project name].deploy.cmd [/T | /Y]
                          [/M:<computer name>]
                          [/A:<Basic | NTLM>]
                          [/U:<user name>]
                          [/P:<password>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

Vous devez spécifier un indicateur /T ou un indicateur /Y pour indiquer si vous souhaitez effectuer une exécution d’évaluation ou un déploiement en direct respectivement (n’utilisez pas les deux indicateurs dans la même commande). Ce tableau explique l’objectif de chacun de ces indicateurs.

Indicateur Description
/T Appelle MSDeploy.exe avec l’indicateur –whatif , qui indique une exécution d’évaluation. Au lieu de déployer le package, il crée un rapport sur ce qui se passerait si vous déployiez le package.
/Y Appelle MSDeploy.exe sans l’indicateur -whatif . Cela déploie le package sur l’ordinateur local ou le serveur de destination spécifié.
/M Spécifie le nom du serveur de destination ou l’URL du service. Pour plus d’informations sur les valeurs que vous pouvez fournir ici, consultez la section Considérations relatives au point de terminaison de cette rubrique. Si vous omettez l’indicateur /M , le package sera déployé sur l’ordinateur local.
/A Spécifie le type d’authentification que MSDeploy.exe devez utiliser pour effectuer le déploiement. Les valeurs possibles sont NTLM et De base. Si vous omettez l’indicateur /A , le type d’authentification par défaut est NTLM pour le déploiement sur le service Web Deploy Remote Agent et de base pour le déploiement sur le gestionnaire Web Deploy.
/U Spécifie le nom d'utilisateur. Cela s’applique uniquement si vous utilisez l’authentification de base.
/P Spécifie le mot de passe. Cela s’applique uniquement si vous utilisez l’authentification de base.
/L Indique que le package doit être déployé sur le IIS Express instance local.
/G Spécifie que le package est déployé à l’aide du paramètre de fournisseur tempAgent. Si vous omettez l’indicateur /G , la valeur par défaut est false.

Notes

Chaque fois que le processus de génération crée un package web, il crée également un fichier nommé [nom du projet].deploy-readme.txt qui explique ces options de déploiement.

En plus de ces indicateurs, vous pouvez spécifier les paramètres d’opération Web Deploy en tant que paramètres .deploy.cmd supplémentaires. Tous les paramètres supplémentaires que vous spécifiez sont simplement transmis à la commande MSDeploy.exe sous-jacente. Pour plus d’informations sur ces paramètres, consultez Paramètres d’opération de déploiement web.

Supposons que vous souhaitiez déployer le projet d’application web ContactManager.Mvc dans un environnement de test en exécutant le fichier .deploy.cmd . Votre environnement de test est configuré pour utiliser le service Web Deploy Remote Agent, comme décrit dans Configurer un serveur web pour la publication Web Deploy (Agent distant). Pour déployer l’application web, vous devez effectuer les étapes suivantes.

Pour déployer une application web à l’aide du fichier .deploy.cmd

  1. Générez et empaqueter le projet d’application web, comme décrit dans Création et empaquetage de projets d’application web.

  2. Modifiez le fichier ContactManager.Mvc.SetParameters.xml pour qu’il contienne les valeurs de paramètres appropriées pour votre environnement de test, comme décrit dans Configuration des paramètres pour le déploiement de package web.

  3. Ouvrez une fenêtre d’invite de commandes et accédez à l’emplacement du fichier ContactManager.Mvc.deploy.cmd .

  4. Tapez cette commande, puis appuyez sur Entrée :

    ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
    

Dans cet exemple :

  • L’indicateur /Y indique que vous souhaitez réellement déployer le package, plutôt que d’effectuer une exécution d’évaluation.
  • L’indicateur /M indique que vous souhaitez déployer le package sur le serveur nommé TESTWEB1. À partir de cette valeur, MSDeploy.exe tente de déployer le package sur le service Web Deploy Remote Agent à l’adresse http://TESTWEB1/MSDeployAgentService.
  • L’indicateur /A indique que vous souhaitez utiliser l’authentification NTLM. Par conséquent, vous n’avez pas besoin de spécifier un nom d’utilisateur et un mot de passe.

Pour illustrer comment l’utilisation du fichier .deploy.cmd simplifie le processus de déploiement, examinez la commande MSDeploy.exe qui est générée et exécutée lorsque vous exécutez ContactManager.Mvc.deploy.cmd à l’aide des options ci-dessus.

msdeploy.exe 
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
 includeAcls='False' 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
 ContactManager.Mvc.SetParameters.xml"

Pour plus d’informations sur l’utilisation du fichier .deploy.cmd pour déployer un package web, consultez Guide pratique pour installer un package de déploiement à l’aide du fichier deploy.cmd.

Utilisation de MSDeploy.exe

Bien que l’utilisation du fichier .deploy.cmd simplifie généralement le processus de déploiement, il existe des situations où il est préférable d’utiliser MSDeploy.exe directement. Par exemple :

  • Si vous souhaitez déployer sur le gestionnaire Web Deploy en tant qu’utilisateur non administrateur, vous ne pouvez pas utiliser le fichier .deploy.cmd . Cela est dû à un bogue dans Web Deploy 2.0, comme décrit sous Considérations relatives au point de terminaison.
  • Si vous souhaitez basculer manuellement entre différents fichiers SetParameters.xml à différents emplacements, vous pouvez préférer utiliser MSDeploy.exe directement.
  • Si vous souhaitez remplacer plusieurs arguments de ligne de commande MSDeploy.exe, vous pouvez préférer utiliser MSDeploy.exe directement.

Lorsque vous utilisez MSDeploy.exe, vous devez fournir trois informations clés :

  • Paramètre –source qui indique d’où proviennent vos données.
  • Paramètre –dest qui indique l’emplacement de vos données.
  • Paramètre –verb qui indique l’opération que vous souhaitez effectuer.

MSDeploy.exe s’appuie sur des fournisseurs Web Deploy pour traiter les données sources et de destination. Web Deploy inclut un grand nombre de fournisseurs qui représentent la gamme d’applications et de sources de données qu’il peut utiliser. Par exemple, il existe des fournisseurs pour les bases de données SQL Server, les serveurs web IIS, les certificats, les assemblys GAC (Global Assembly Cache), divers fichiers de configuration différents et de nombreux autres types de données. Le paramètre –source et le paramètre –dest doivent spécifier un fournisseur, au format –source:[providerName]=[location]. Lorsque vous déployez un package web sur un site web IIS, vous devez utiliser les valeurs suivantes :

  • Le fournisseur -source est toujours un package. Par exemple :

    -source:package='[path to web package]'
    
  • Le fournisseur –dest est toujours automatique. Par exemple :

    -dest:auto='[server name or service URL]'
    
  • Le verbe - est toujours synchronisé.

    -verb:sync
    

En outre, vous devez spécifier différents autres paramètres spécifiques au fournisseur et paramètres généraux d’opération. Par exemple, supposons que vous souhaitiez déployer l’application web ContactManager.Mvc dans un environnement intermédiaire. Le déploiement cible le gestionnaire Web Deploy et doit utiliser l’authentification de base. Pour déployer l’application web, vous devez effectuer les étapes suivantes.

Pour déployer une application web à l’aide de MSDeploy.exe

  1. Générez et empaquetez le projet d’application web, comme décrit dans Génération et empaquetage de projets d’application web.

  2. Modifiez le fichier ContactManager.Mvc.SetParameters.xml pour qu’il contienne les valeurs de paramètres correctes pour votre environnement intermédiaire, comme décrit dans Configuration des paramètres pour le déploiement de package web.

  3. Ouvrez une fenêtre d’invite de commandes et accédez à l’emplacement de MSDeploy.exe. Il s’agit généralement de %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe.

  4. Tapez cette commande, puis appuyez sur Entrée (ignorer les sauts de ligne) :

    MSDeploy.exe
      -source:package="[path]\ContactManager.Mvc.zip"
      -dest:auto,
            computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
            username="FABRIKAM\stagingdeployer",
            $CREDENTIAL_PLACEHOLDER$,
            authtype="Basic",
            includeAcls="False"
      -verb:sync
      -disableLink:AppPoolExtension
      -disableLink:ContentExtension
      -disableLink:CertificateExtension
      -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
      -allowUntrusted
    

Dans cet exemple :

  • Le paramètre –source spécifie le fournisseur de package et indique l’emplacement du package web.
  • Le paramètre –dest spécifie le fournisseur automatique . Le paramètre computerName fournit l’URL du service du gestionnaire Web Deploy sur le serveur de destination. Le paramètre authtype indique que vous souhaitez utiliser l’authentification de base et que, par conséquent, vous devez fournir un nom d’utilisateur et un mot de passe. Enfin, le paramètre includeAcls="False » indique que vous ne souhaitez pas copier les listes de contrôle d’accès (ACL) des fichiers de votre application web source vers le serveur de destination.
  • L’argument –verb:sync indique que vous souhaitez répliquer le contenu source sur le serveur de destination.
  • Les arguments –disableLink indiquent que vous ne souhaitez pas répliquer des pools d’applications, une configuration de répertoires virtuels ou des certificats SSL (Secure Sockets Layer) sur le serveur de destination. Pour plus d’informations, consultez Web Deploy Link Extensions.
  • Le paramètre –setParamFile fournit l’emplacement du fichier SetParameters.xml .
  • Le commutateur –allowUntrusted indique que Web Deploy doit accepter les certificats SSL qui n’ont pas été émis par une autorité de certification approuvée. Si vous effectuez un déploiement sur le gestionnaire Web Deploy et que vous avez utilisé un certificat auto-signé pour sécuriser l’URL du service, vous devez inclure ce commutateur.

Automatisation du déploiement de packages web

Dans de nombreux scénarios d’entreprise, vous souhaiterez déployer vos packages web dans le cadre d’un déploiement automatisé ou en une seule étape. Que vous choisissiez de déployer vos packages web en exécutant le fichier .deploy.cmd ou en utilisant MSDeploy.exe directement, vous pouvez paramétrer vos commandes et les appeler à partir d’une cible dans un fichier projet Microsoft Build Engine (MSBuild).

Dans l’exemple de solution gestionnaire de contacts, examinez la cible PublishWebPackages dans le fichier Publish.proj . Cette cible s’exécute une fois pour chaque fichier .deploy.cmd identifié par une liste d’éléments nommée PublishPackages. La cible utilise des propriétés et des métadonnées d’élément pour créer un ensemble complet de valeurs d’argument pour chaque fichier .deploy.cmd , puis utilise la tâche Exec pour exécuter la commande.

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  ...
  <PropertyGroup>
    <_WhatIfSwitch>/Y</_WhatIfSwitch>
    <_WhatIfSwitch Condition=" '$(_WhatIf)'=='true' ">/T</_WhatIfSwitch>
    <_Cmd>
      %(PublishPackages.FullPath) $(_WhatifSwitch) /M:$(MSDeployComputerName) 
      /U:$(MSDeployUsername) /P:$(Password) /A:$(MSDeployAuth) 
      %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Remarque

Pour obtenir une vue d’ensemble plus large du modèle de fichier projet dans l’exemple de solution et une introduction aux fichiers projet personnalisés en général, consultez Comprendre le fichier projet et Comprendre le processus de génération.

Considérations relatives aux points de terminaison

Que vous déployiez votre package web en exécutant le fichier .deploy.cmd ou en utilisant MSDeploy.exe directement, vous devez spécifier un nom d’ordinateur ou un point de terminaison de service pour votre déploiement.

Si le serveur web de destination est configuré pour le déploiement à l’aide du service Web Deploy Remote Agent, vous spécifiez l’URL du service cible comme destination.

http://[server name]/MSDeployAgentService

Vous pouvez également spécifier le nom du serveur seul comme destination, et Web Deploy déduit l’URL du service d’agent distant.

[server name]

Si le serveur web de destination est configuré pour le déploiement à l’aide du gestionnaire Web Deploy, vous devez spécifier l’adresse de point de terminaison du service de gestion web IIS (WMSvc) comme destination. Par défaut, cela prend la forme suivante :

https://[server name]:8172/MSDeploy.axd

Vous pouvez cibler l’un de ces points de terminaison à l’aide du fichier .deploy.cmd ou directement MSDeploy.exe. Toutefois, si vous souhaitez effectuer un déploiement sur le gestionnaire Web Deploy en tant qu’utilisateur non administrateur, comme décrit dans Configurer un serveur web pour la publication Web Deploy (gestionnaire Web Deploy), vous devez ajouter une chaîne de requête à l’adresse du point de terminaison de service.

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

Cela est dû au fait que l’utilisateur non administrateur n’a pas d’accès au niveau du serveur à IIS ; il ou elle a uniquement accès à un site web IIS spécifique. Au moment de la rédaction de cet article, en raison d’un bogue dans le pipeline de publication web (WPP), vous ne pouvez pas exécuter le fichier .deploy.cmd à l’aide d’une adresse de point de terminaison qui inclut une chaîne de requête. Dans ce scénario, vous devez déployer votre package web directement à l’aide de MSDeploy.exe.

Remarque

Pour plus d’informations sur le service Web Deploy Remote Agent et le gestionnaire Web Deploy, consultez Choisir la bonne approche pour le déploiement web. Pour obtenir des conseils sur la configuration de vos fichiers projet spécifiques à l’environnement à déployer sur ces points de terminaison, consultez Configurer les propriétés de déploiement d’un environnement cible.

Considérations relatives à l'authentification

Que vous déployiez votre package web en exécutant le fichier .deploy.cmd ou en utilisant MSDeploy.exe directement, vous devez spécifier un type d’authentification. Web Deploy accepte deux valeurs possibles : NTLM ou De base. Si vous spécifiez l’authentification de base, vous devez également fournir un nom d’utilisateur et un mot de passe. Vous devez prendre en compte différents facteurs lorsque vous sélectionnez un type d’authentification :

  • Si vous effectuez un déploiement sur le service Web Deploy Remote Agent, vous devez utiliser l’authentification NTLM. Le service d’agent distant n’accepte pas les informations d’identification d’authentification de base.
  • Si vous effectuez un déploiement sur le gestionnaire Web Deploy, vous pouvez utiliser NTLM ou l’authentification de base. Le paramètre par défaut est l’authentification de base. Bien que l’authentification de base s’appuie sur les noms d’utilisateur et les mots de passe transmis en texte brut, vos informations d’identification sont protégées car le gestionnaire Web Deploy utilise toujours le chiffrement SSL.
  • Si votre package web inclut une base de données et que le serveur web et le serveur de base de données sont des machines distinctes, vous ne pourrez pas déployer la base de données à l’aide de l’authentification NTLM en raison de la limitation du « double tronçon » NTLM. Vous devez utiliser les informations d’identification SQL Server dans votre chaîne de connexion de déploiement ou fournir des informations d’identification d’authentification de base à Web Deploy. Ce problème est décrit plus en détail dans Déploiement de bases de données d’appartenance dans des environnements d’entreprise.

Conclusion

Cette rubrique décrit comment déployer un package web en exécutant le fichier .deploy.cmd ou en utilisant MSDeploy.exe directement. Il a expliqué quand chaque approche peut être appropriée, et il a décrit comment paramétrer et exécuter une commande de déploiement dans le cadre d’un processus de génération automatisé ou à une seule étape plus large.

En savoir plus

Pour obtenir des conseils sur la création et la paramétrage d’un package de déploiement web, consultez Création et empaquetage de projets d’application web et Configuration de paramètres pour le déploiement de packages web. Pour obtenir des conseils sur la création et le déploiement de packages web à partir d’un instance Team Foundation Server (TFS), consultez Configuration de Team Foundation Server pour le déploiement web automatisé. Pour plus d’informations sur la façon de personnaliser et de dépanner le processus de déploiement, consultez Exclusion des fichiers et dossiers du déploiement.