Déploiement de packages web
par Jason Lee
Cette rubrique explique comment publier des packages de déploiement web sur un serveur distant à l’aide de l’outil de déploiement web Iis (Internet Information Services) (Web Deploy) 2.0.
Il existe deux façons principales 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 le fichier .deploy.cmd est d’exécuter MSDeploy.exe avec des valeurs prédéterminées, afin que vous n’ayez pas à fournir autant d’informations pour déployer le package. Cela simplifie le processus de déploiement. En revanche, l’utilisation de MSDeploy.exe vous donne beaucoup plus de flexibilité sur la façon dont votre package est déployé.
Quelle approche vous utiliserez dépend de divers facteurs, notamment le 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 identifier quand chaque approche est appropriée.
Les tâches et les procédures pas à pas de cette rubrique supposent que :
- Vous avez créé et empaqueté votre application web, comme décrit dans Building and Packaging Web Application Projects.
- Vous avez modifié le fichier SetParameters.xml pour fournir les valeurs de paramètre appropriées pour votre environnement cible, comme décrit dans Configuration des paramètres pour le déploiement de package web.
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 connaît déjà les 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 exécuter une exécution d’essai 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 avez déployé 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 dans cette rubrique. Si vous omettez l’indicateur /M , le package est déployé sur l’ordinateur local. |
/Un | Spécifie le type d’authentification que MSDeploy.exe devez utiliser pour effectuer le déploiement. Les valeurs possibles sont Bearer, NTLM et Basic. Si vous omettez l’indicateur /A , le type d’authentification est défini par défaut sur NTLM pour le déploiement sur le service Web Deploy Remote Agent et sur Basic pour le déploiement sur le gestionnaire Web Deploy. |
/U | Spécifie le nom de l’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 l’instance IIS Express locale. |
/G | Spécifie que le package est déployé à l’aide du paramètre du fournisseur tempAgent. Si vous omettez l’indicateur /G , la valeur par défaut est false. |
Remarque
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 de .deploy.cmd supplémentaires. Tous les paramètres supplémentaires que vous spécifiez sont simplement passés à 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 souhaitez 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 Configure a Web Server for Web Deploy Publishing (Remote Agent). Pour déployer l’application web, vous devez effectuer les étapes suivantes.
Pour déployer une application web à l’aide du fichier .deploy.cmd
Générez et empaquetez le projet d’application web, comme décrit dans Building and Packaging Web Application Projects.
Modifiez le fichier ContactManager.Mvc.SetParameters.xml pour contenir les valeurs de paramètre correctes pour votre environnement de test, comme décrit dans Configuration des paramètres pour le déploiement de package web.
Ouvrez une fenêtre d’invite de commandes et accédez à l’emplacement du fichier ContactManager.Mvc.deploy.cmd .
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 tentera 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 indiquées 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 certaines situations où il est préférable d’utiliser MSDeploy.exe directement. Par exemple :
- Si vous souhaitez effectuer le déploiement 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 dans 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 préférerez peut-être utiliser MSDeploy.exe directement.
Lorsque vous utilisez MSDeploy.exe, vous devez fournir trois éléments clés d’informations :
- Paramètre –source qui indique l’origine de 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 les 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), différents fichiers de configuration et beaucoup d’autres types de données. Le paramètre –source et le paramètre –dest doivent spécifier un fournisseur, sous la forme –source :[providerName]=[location]. Lorsque vous déployez un package web sur un site web IIS, vous devez utiliser ces valeurs :
Le fournisseur –source est toujours 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 les paramètres d’opération généraux. Par exemple, supposons que vous souhaitez 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 à l’aide d’un jeton d’accès
MSDeploy V3 prend en charge l’authentification avec un jeton d’accès, également appelé jeton du porteur. Les jetons d’accès sont recommandés, car ils sont les plus sécurisés.
Générez et empaquetez le projet d’application web, comme décrit dans Building and Packaging Web Application Projects.
Modifiez le fichier ContactManager.Mvc.SetParameters.xml pour contenir les valeurs de paramètre correctes pour votre environnement intermédiaire, comme décrit dans Configuration des paramètres pour le déploiement de package web.
Ouvrez une fenêtre d’invite de commandes et accédez à l’emplacement de MSDeploy.exe. C’est généralement à
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
.Si vous n’avez pas de jeton d’accès, créez-en un à l’aide de la commande :
az account get-access-token --query accessToken
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="Bearer", includeAcls="False", Password="{token}" -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
Bearer
d’authentification indique que vous souhaitez utiliser un jeton d’accès pour l’authentification et, par conséquent, vous devez fournir la valeur du jeton comme mot de passe. 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 de pools d’applications, de configuration de répertoires virtuels ou de 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.
Pour déployer une application web à l’aide de MSDeploy.exe et de l’authentification de base
Avertissement
L’authentification de base n’est pas recommandée si des méthodes plus sécurisées (jeton du porteur) sont disponibles.
Générez et empaquetez le projet d’application web, comme décrit dans Building and Packaging Web Application Projects.
Modifiez le fichier ContactManager.Mvc.SetParameters.xml pour contenir les valeurs de paramètre correctes pour votre environnement intermédiaire, comme décrit dans Configuration des paramètres pour le déploiement de package web.
Ouvrez une fenêtre d’invite de commandes et accédez à l’emplacement de MSDeploy.exe. C’est généralement à
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
.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 d’authentification indique que vous souhaitez utiliser l’authentification de base et, 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 de pools d’applications, de configuration de répertoires virtuels ou de 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 un grand nombre de scénarios d’entreprise, vous souhaiterez déployer vos packages web dans le cadre d’un déploiement à une seule étape ou automatisé plus volumineux. 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 générer 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 présentation des fichiers projet personnalisés en général, consultez Présentation du fichier projet et compréhension du processus de génération.
Considérations relatives au point 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 en tant que 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 MSDeploy.exe directement. Toutefois, si vous souhaitez déployer 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 l’écriture, 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 à l’aide de MSDeploy.exe directement.
Remarque
Pour plus d’informations sur le service Web Deploy Remote Agent et le gestionnaire Web Deploy, consultez Choix de l’approche appropriée 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 pour 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 les valeurs possibles : porteur, NTLM ou Basic. Si vous spécifiez porteur, vous devez fournir le jeton comme mot de passe et toute valeur pour le nom d’utilisateur. Si vous spécifiez l’authentification de base, vous devez également fournir un nom d’utilisateur et un mot de passe. Il existe différents facteurs dont vous devez tenir compte 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 un jeton d’accès (jeton du porteur), NTLM ou une authentification de base. Le paramètre par défaut est l’authentification de base. L’authentification de base s’appuie sur les noms d’utilisateurs 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. La méthode la plus sécurisée consiste à utiliser un jeton d’accès, ce qui évite d’envoyer un mot de passe réel.
- 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 déploiement chaîne de connexion ou fournir des informations d’identification d’authentification de base à Web Deploy. Ce problème est décrit plus en détail dans le 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 elle a décrit comment paramétrer et exécuter une commande de déploiement dans le cadre d’un processus de génération unique ou automatisé plus volumineux.
Pour aller plus loin
Pour obtenir des conseils sur la création et le paramétrage d’un package de déploiement web, consultez Création et empaquetage de projets d’applications web et configuration de paramètres pour le déploiement de package web. Pour obtenir des conseils sur la création et le déploiement de packages web à partir d’une instance Team Foundation Server (TFS), consultez Configuration de Team Foundation Server pour le déploiement web automatisé. Pour plus d’informations sur la personnalisation et la résolution des problèmes du processus de déploiement, consultez Exclusion des fichiers et dossiers du déploiement.