Implementar paquetes web
por Jason Lee
En este tema se describe cómo puede publicar paquetes de implementación web en un servidor remoto mediante la Herramienta de implementación web de Internet Information Services (IIS) (Web Deploy) 2.0.
Hay dos formas principales de implementar un paquete web en un servidor remoto:
- Puede usar directamente la utilidad de línea de comandos MSDeploy.exe.
- Puede ejecutar el archivo [nombre del proyecto].deploy.cmd que genera el proceso de compilación.
El resultado final es el mismo independientemente del enfoque que use. Básicamente, el archivo .deploy.cmd ejecuta MSDeploy.exe con algunos valores predeterminados, para que no tenga que proporcionar tanta información para implementar el paquete. Esto simplifica el proceso de implementación. Por otro lado, el uso de MSDeploy.exe directamente proporciona mucha más flexibilidad sobre cómo se implementa el paquete.
El enfoque que use dependerá de diversos factores, incluido el control que necesita sobre el proceso de implementación y si tiene como destino el servicio Agente remoto de Web Deploy o el controlador de Web Deploy. En este tema se explica cómo usar cada enfoque y se indica cuándo es adecuado cada uno.
En las tareas y tutoriales de este tema se supone que:
- Ha compilado y empaquetado la aplicación web, como se describe en Compilación y empaquetado de proyectos de aplicación web.
- Ha modificado el archivo SetParameters.xml para proporcionar los valores de parámetro adecuados para el entorno de destino,como se describe en Configuración de parámetros para la implementación de paquetes web.
La ejecución del archivo [nombre del proyecto].deploy.cmd es la manera más sencilla de implementar un paquete web. En concreto, el uso del archivo .deploy.cmd ofrece estas ventajas sobre el uso de MSDeploy.exe directamente:
- No es necesario especificar la ubicación del paquete de implementación web, el archivo .deploy.cmd ya sabe dónde está.
- No es necesario especificar la ubicación del archivo SetParameters.xml; el archivo .deploy.cmd ya sabe dónde está.
- No es necesario especificar proveedores de MSDeploy de origen y destino: el archivo .deploy.cmd ya sabe qué valores usar.
- No es necesario especificar valores de la operación MSDeploy; el archivo .deploy.cmd agrega automáticamente los valores necesarios habitualmente al comando MSDeploy.exe.
Antes de usar el archivo .deploy.cmd para implementar un paquete web, debe asegurarse de que:
- El archivo .deploy.cmd, el archivo [nombre del proyecto].SetParameters.xml y el paquete web ([nombre del proyecto].zip) se encuentran en la misma carpeta.
- Web Deploy (MSDeploy.exe) está instalado en el equipo que ejecuta el archivo .deploy.cmd.
El archivo .deploy.cmd admite varias opciones de línea de comandos. Al ejecutar el archivo desde un símbolo del sistema, esta es la sintaxis básica:
[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]
Debe especificar una marca /T o /Y para indicar si quiere realizar una ejecución de prueba o una implementación en directo respectivamente (no use las dos marcas en el mismo comando). En esta tabla se explica el propósito de cada una de estas marcas.
Marca | Descripción |
---|---|
/T | Llama a MSDeploy.exe con la marca –whatif, que indica una ejecución de prueba. En lugar de implementar el paquete, crea un informe de lo que sucedería si se implementase el paquete. |
/Y | Llama a MSDeploy.exe sin la marca –whatif. Esto implementa el paquete en el equipo local o en el servidor de destino especificado. |
/M | Especifica el nombre del servidor de destino o la dirección URL del servicio. Para más información sobre los valores que puede proporcionar aquí, vea la sección Consideraciones de punto de conexión de este tema. Si omite la marca /M, el paquete se implementará en el equipo local. |
/A | Especifica el tipo de autenticación que MSDeploy.exe debe usar para realizar la implementación. Los valores posibles son Portador, NTLM y Básica. Si omite la marca /A, el tipo de autenticación tiene como valor predeterminado NTLM para la implementación en el servicio Agente remoto de Web Deploy y Basic para la implementación en el controlador de Web Deploy. |
/U | Especifica el nombre de usuario. Esto solo se aplica si usa la autenticación básica. |
/P | Especifica la contraseña. Esto solo se aplica si usa la autenticación básica. |
/L | Indica que el paquete se debe implementar en la instancia local de IIS Express. |
/G | Especifica que el paquete se implementa mediante elvalor del proveedor tempAgent. Si omite la marca /G, el valor predeterminado es false. |
Nota:
Cada vez que el proceso de compilación crea un paquete web, también crea un archivo denominado [nombre del proyecto].deploy-readme.txt en el que se explican estas opciones de implementación.
Además de estas marcas, puede especificar valores de la operación Web Deploy como parámetros de .deploy.cmd adicionales. Cualquier valor adicional que especifique simplemente se pasa al comando MSDeploy.exe subyacente. Para más información sobre estos valores, vea Valores de operación de Web Deploy.
Imagine que quiere implementar el proyecto de aplicación web ContactManager.Mvc en un entorno de prueba mediante la ejecución del archivo .deploy.cmd. El entorno de prueba está configurado para usar el servicio Agente remoto de Web Deploy, como se describe en Configuración de un servidor web para la publicación de Web Deploy (Agente remoto). Para implementar la aplicación web, debe completar los pasos siguientes.
Para implementar una aplicación web mediante el archivo .deploy.cmd
Compile y empaquete el proyecto de aplicación web, como se describe en Compilación y empaquetado de proyectos de aplicación web.
Modifique el archivo ContactManager.Mvc.SetParameters.xml para que contenga los valores de parámetro correctos para el entorno de prueba, como se describe en Configuración de parámetros para la implementación de paquetes web.
Abra una ventana del símbolo del sistema y vaya a la ubicación del archivo ContactManager.Mvc.deploy.cmd.
Escriba este comando y, después, presione Entrar:
ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
En este ejemplo:
- La marca /Y indica que realmente quiere implementar el paquete, en lugar de realizar una ejecución de prueba.
- La marca /M indica que quiere implementar el paquete en el servidor denominado TESTWEB1. A partir de este valor, MSDeploy.exe intentará implementar el paquete en el servicio Agente remoto de Web Deploy en http://TESTWEB1/MSDeployAgentService.
- La marca /A indica que quiere usar la autenticación de NTLM. Por tanto, no es necesario especificar un nombre de usuario y una contraseña.
Para ilustrar cómo el uso del archivo .deploy.cmd simplifica el proceso de implementación, examine el comando MSDeploy.exe que se genera y ejecuta al ejecutar ContactManager.Mvc.deploy.cmd con las opciones que se han mostrado antes.
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"
Para más información sobre el uso del archivo .deploy.cmd para implementar un paquete web, vea Procedimiento: Instalación de un paquete de implementación mediante el archivo deploy.cmd.
Uso de MSDeploy.exe
Aunque el uso del archivo .deploy.cmd generalmente simplifica el proceso de implementación, hay algunas situaciones en las que es preferible usar MSDeploy.exe directamente. Por ejemplo:
- Si quiere realizar la implementación en el controlador de Web Deploy como un usuario que no es administrador, no puede usar el archivo .deploy.cmd. Esto se debe a un error en Web Deploy 2.0, como se describe en Consideraciones de punto de conexión.
- Si quiere cambiar manualmente entre archivos SetParameters.xml diferentes en otras ubicaciones, es posible que prefiera usar MSDeploy.exe directamente.
- Si quiere invalidar varios argumentos de línea de comandos de MSDeploy.exe, es posible que prefiera usar MSDeploy.exe directamente.
Al usar MSDeploy.exe, debe proporcionar tres fragmentos de información clave:
- Un parámetro –source que indica de dónde proceden los datos.
- Un parámetro –dest que indica a dónde van los datos.
- Un parámetro –verb que indica la operación que quiere realizar.
MSDeploy.exe se basa en los proveedores de Web Deploy para procesar los datos de origen y destino. Web Deploy incluye una gran cantidad de proveedores que representan el intervalo de aplicaciones y orígenes de datos con los que puede trabajar; por ejemplo, hay proveedores para bases de datos de SQL Server, servidores web IIS, certificados, ensamblados de la caché global de ensamblados (GAC), varios archivos de configuración diferentes y otros muchos tipos de datos. Tanto el parámetro –source como el parámetro –dest deben especificar un proveedor, con el formato –source:[nombreDelProveedor]=[ubicación]. Al implementar un paquete web en un sitio web de IIS, debe usar estos valores:
El proveedor –source siempre es package. Por ejemplo:
-source:package='[path to web package]'
El proveedor –dest siempre es auto. Por ejemplo:
-dest:auto='[server name or service URL]'
–verb siempre es sync.
-verb:sync
Además, deberá especificar otros valores específicos del proveedor y valores de operación específicas del proveedor. Por ejemplo, imagine que quiere implementar la aplicación web ContactManager.Mvc en un entorno de ensayo. La implementación tendrá como destino el controlador de Web Deploy y debe usar la autenticación básica. Para implementar la aplicación web, debe completar los pasos siguientes.
Para implementar una aplicación web mediante MSDeploy.exe con un token de acceso
MSDeploy V3 admite la autenticación con un token de acceso, también conocido como token de portador. Se recomiendan tokens de acceso porque son los más seguros.
Compile y empaquete el proyecto de aplicación web, como se describe en Compilación y empaquetado de proyectos de aplicación web.
Modifique el archivo ContactManager.Mvc.SetParameters.xml para que contenga los valores de parámetro correctos para el entorno de ensayo, como se describe en Configuración de parámetros para la implementación de paquetes web.
Abra una ventana del símbolo del sistema y vaya a la ubicación de MSDeploy.exe. Normalmente, se encuentra en
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
.Si no tiene un token de acceso, cree uno con el comando:
az account get-access-token --query accessToken
Escriba este comando y presione Entrar (omita los saltos de línea):
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
En este ejemplo:
- El parámetro –source especifica el proveedor package e indica la ubicación del paquete web.
- El parámetro –dest especifica el proveedor auto. El valor computerName proporciona la dirección URL de servicio del controlador de Web Deploy en el servidor de destino. La configuración de authtype
Bearer
indica que desea usar un token de acceso para la autenticación y, como tal, debe proporcionar el valor del token como contraseña. La opción includeAcls="False" indica que no desea copiar las listas de control de acceso (ACL) de los archivos de la aplicación web de origen en el servidor de destino. - El argumento –verb:sync indica que quiere replicar el contenido de origen en el servidor de destino.
- Los argumentos –disableLink indican que no quiere replicar grupos de aplicaciones, configuración de directorios virtuales o certificados de Capa de sockets seguros (SSL) en el servidor de destino. Para más información, vea Extensiones de vínculo de Web Deploy.
- El parámetro –setParamFile proporciona la ubicación del archivo SetParameters.xml.
- El modificador –allowUntrusted indica que Web Deploy debe aceptar certificados SSL no emitidos por una entidad de certificación de confianza. Si va a realizar la implementación en el controlador de Web Deploy y ha usado un certificado autofirmado para proteger la dirección URL del servicio, debe incluir este modificador.
Para implementar una aplicación web mediante la autenticación MSDeploy.exe y Básica
Advertencia
No se recomienda la autenticación básica si hay métodos más seguros (token de portador) disponibles.
Compile y empaquete el proyecto de aplicación web, como se describe en Compilación y empaquetado de proyectos de aplicación web.
Modifique el archivo ContactManager.Mvc.SetParameters.xml para que contenga los valores de parámetro correctos para el entorno de ensayo, como se describe en Configuración de parámetros para la implementación de paquetes web.
Abra una ventana del símbolo del sistema y vaya a la ubicación de MSDeploy.exe. Normalmente, se encuentra en
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
.Escriba este comando y presione Entrar (omita los saltos de línea):
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
En este ejemplo:
- El parámetro –source especifica el proveedor package e indica la ubicación del paquete web.
- El parámetro –dest especifica el proveedor auto. El valor computerName proporciona la dirección URL de servicio del controlador de Web Deploy en el servidor de destino. El valor authtype indica que quiere usar la autenticación básica y, como tal, debe proporcionar un nombre de usuario y una contraseña. Por último, el valor includeAcls="False" indica que no quiere copiar las listas de control de acceso (ACL) de los archivos de la aplicación web de origen en el servidor de destino.
- El argumento –verb:sync indica que quiere replicar el contenido de origen en el servidor de destino.
- Los argumentos –disableLink indican que no quiere replicar grupos de aplicaciones, configuración de directorios virtuales o certificados de Capa de sockets seguros (SSL) en el servidor de destino. Para más información, vea Extensiones de vínculo de Web Deploy.
- El parámetro –setParamFile proporciona la ubicación del archivo SetParameters.xml.
- El modificador –allowUntrusted indica que Web Deploy debe aceptar certificados SSL no emitidos por una entidad de certificación de confianza. Si va a realizar la implementación en el controlador de Web Deploy y ha usado un certificado autofirmado para proteger la dirección URL del servicio, debe incluir este modificador.
Automatización de la implementación de paquetes web
En muchos escenarios empresariales, querrá implementar los paquetes web como parte de una implementación de un solo paso o automatizada más grande. Independientemente de si decide implementar los paquetes web con la ejecución del archivo .deploy.cmd o directamente con MSDeploy.exe, puede parametrizar los comandos y llamarlos desde un destino en un archivo del proyecto de Microsoft Build Engine (MSBuild).
En la solución de ejemplo Contact Manager, examine el destino PublishWebPackages en el archivo Publish.proj. Este destino se ejecuta una vez para cada archivo .deploy.cmd identificado por una lista de elementos denominada PublishPackages. El destino usa propiedades y metadatos de elemento para crear un conjunto completo de valores de argumento para cada archivo .deploy.cmd y, después, usa la tarea Exec para ejecutar el comando.
<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>
Nota:
Para obtener información general más amplia sobre el modelo de archivos del proyecto en la solución de ejemplo y una introducción a los archivos del proyecto personalizados en general, vea Descripción del archivo del proyecto y Descripción del proceso de compilación.
Consideraciones de punto de conexión
Independientemente de si implementa el paquete web mediante la ejecución del archivo .deploy.cmd o directamente con MSDeploy.exe, debe especificar un nombre de equipo o un punto de conexión de servicio para la implementación.
Si el servidor web de destino está configurado para la implementación mediante el servicio Agente remoto de Web Deploy, especifique la dirección URL del servicio de destino como destino.
http://[server name]/MSDeployAgentService
Como alternativa, puede especificar el nombre del servidor solo como destino y Web Deploy deducirá la URL del servicio del agente remoto.
[server name]
Si el servidor web de destino está configurado para la implementación mediante el controlador de Web Deploy, debe especificar la dirección del punto de conexión del Servicio de administración web de IIS (WMSvc) como destino. De manera predeterminada, adopta este formato:
https://[server name]:8172/MSDeploy.axd
Puede tener como destino cualquiera de estos puntos de conexión mediante el archivo .deploy.cmd o con MSDeploy.exe directamente. Pero si quiere implementar en el controlador de Web Deploy como un usuario que no es administrador, como se describe en Configuración de un servidor web para la publicación de Web Deploy (controlador de Web Deploy), debe agregar una cadena de consulta a la dirección del punto de conexión de servicio.
https://[server name]:8172/MSDeploy.axd?site=[IIS website name]
Esto se debe a que el usuario que no es administrador no tiene acceso de nivel de servidor a IIS; solo tiene acceso a un sitio web de IIS específico. En el momento de redactar este tutorial, debido a un error en la canalización de publicación web (WPP), no se puede ejecutar el archivo .deploy.cmd mediante una dirección de punto de conexión que incluya una cadena de consulta. En este escenario, debe implementar el paquete web mediante MSDeploy.exe directamente.
Nota:
Para más información sobre el servicio Agent remoto de Web Deploy y el controlador de Web Deploy, vea Elección del enfoque adecuado para la implementación web. Para obtener instrucciones sobre cómo configurar los archivos del proyecto específicos del entorno para implementarlos en estos puntos de conexión, vea Configuración de propiedades de implementación para un entorno de destino.
Consideraciones de la autenticación
Independientemente de si implementa el paquete web mediante la ejecución del archivo .deploy.cmd o directamente con MSDeploy.exe, debe especificar un tipo de autenticación. Web Deploy acepta estos valores: Portador, NTLM o Básica. Si especifica Portador, debe proporcionar el token como contraseña y cualquier valor para el nombre de usuario. Si especifica la autenticación básica, también debe proporcionar un nombre de usuario y una contraseña. Hay varios factores que debe tener en cuenta al seleccionar un tipo de autenticación:
- Si va a realizar la implementación en el servicio Agente remoto de Web Deploy, debe usar la autenticación NTLM. El servicio del agente remoto no acepta credenciales de autenticación básica.
- Si va a realizar la implementación en el controlador de Web Deploy, puede usar un token de acceso (token de portador), NTLM o autenticación básica. E valor predeterminado es la autenticación básica. La autenticación básica se basa en que los nombres de usuario y las contraseñas se transmiten en texto sin formato, sus credenciales están protegidas ya que el controlador de implementación web siempre usa cifrado SSL. El método más seguro es usar un token de acceso, lo que evita enviar una contraseña real.
- Si el paquete web incluye una base de datos y el servidor web y el servidor de bases de datos son máquinas independientes, no podrá implementar la base de datos mediante la autenticación NTLM debido a la limitación de "doble salto" de NTLM. Debe usar las credenciales de SQL Server en la cadena de conexión de implementación, o bien proporcionar credenciales de autenticación básica a Web Deploy. Este problema se describe con más detalle en Implementación de bases de datos de pertenencia en entornos empresariales.
Conclusión
En este tema se describe cómo puede implementar un paquete web mediante la ejecución del archivo .deploy.cmd o directamente con MSDeploy.exe. Se explica cuándo cada enfoque puede ser adecuado y se describe cómo puede parametrizar y ejecutar un comando de implementación como parte de un proceso de compilación automatizado o de un solo paso más grande.
Lecturas adicionales
Para obtener instrucciones sobre cómo crear y parametrizar un paquete de implementación web, vea Compilación y empaquetado de proyectos de aplicaciones web y Configuración de parámetros para la implementación de paquetes web. Para obtener instrucciones sobre cómo compilar e implementar paquetes web desde una instancia de Team Foundation Server (TFS), vea Configuración de Team Foundation Server para la implementación web automatizada. Para obtener información sobre cómo personalizar y solucionar problemas del proceso de implementación, vea Exclusión de archivos y carpetas de la implementación.