lunes, 27 de febrero de 2012

Implementando una aplicacion web con Web Packages y MsDeploy

En estos días nos ha tocado tener que hacer una implementación de una aplicación Web, en un ambiente sumamente restrictivo. Para los que han pasado por dicha Experiencia, saben que no es algo trivial, y normalmente (por lo menos hasta ahora) suele ser un proceso mas o menos manual que requiere mucha documentación para llevarlo a buen puerto, y además involucra tanto a desarrolladores como a los administradores del servidor.

El objetivo de este articulo es presentarles desde el punto de vista del desarrollador, y para los que aun no tengan el gusto de conocerlo, a una herramienta que nos va a simplificar de manera sustancial el proceso anteriormente mencionado.

Algunos de los elementos que debemos considerar a la hora de realizar dicha tarea son:
  • Contenido Web (paginas web, controles, imágenes, etc.)
  • Configuración IIS - Base de datos
  • Ensamblados de la GAC, componentes COM, dependencias en general.
  • Entradas en el registro
  • Certificados de seguridad
  • Pool de aplicaciones en donde va a correr la aplicación
Para realizar dicha implementación, existe algo llamado "Web Package", que visual Studio 2010 genera utilizando una herramienta llamada MsDeploy. Que es un Web Package? Es una unidad atómica, transparente y auto descriptiva que puede ser fácilmente hidratada dentro de un servidor IIS para reproducir el sitio web que se quiere implementar.

A continuación vamos a establecer los pasos necesarios para implementar una aplicación web desde Visual Studio 2010.

1) Establecer la configuración del paquete a publicar.

Para ello hacemos clic con el botón derecho sobre la aplicación web y seleccionamos del menú contextual la opción "Package/Publish Settings". También es posible acceder a dicha configuración accediendo a las propiedades del proyecto web (Project > NombreDelProyecto Properties).



Como se puede ver en la imagen anterior, en esta pantalla se pueden elegir que elementos se deben incluir en la implementación, por ejemplo si solo se van a empaquetar solo los archivos necesarios para correr la aplicación o el contenido completo de la carpeta del proyecto, así como el nombre que tendrá la aplicación en el IIS destino, entre otras cosas.

Algunos de los elementos que se pueden seleccionar y en los que nos detendremos particularmente son:

  1. El Check box "Include all databases configured in Package Publish SQL tab"
  2. El Check box "create Deployment Package as zip file"

El primero le dice a la herramienta que debe incluir la base configurada en la pestaña Package Publish SQL (la vamos a ver a continuacion) La segunda nos permite seleccionar en donde se va a generar el empaquetado, que por cierto, es un archivo zip.

2) Establecer la configuración de la base de datos a implementar

Si, como lo leen, esta herramienta es capaz de empaquetar la base e implementarla en el servidor de producción (este es el momento en el que todos empezamos a aplaudir).


Presionando el botón "Import from Web.config", le proporcionamos a la herramienta, la cadena de conexión necesaria para conectarse a la base de datos que deseamos empaquetar.

Un detalle importante es que han sido aplicada transformaciones al web.config, las mismas se habilitan presionando botón derecho sobre el archivo web.config y seleccionando la opción "Add Config Transforms" del menú contextual. Básicamente lo que nos permite esto, es agregar, quitar o remplazar opciones del archivo de configuración de manera sencilla en el servidor de producción. Este tema está fuera del alcance del presente artículo, pero pueden leer más acerca del tema en: http://www.codeguru.com/csharp/article.php/c17407 y http://msdn.microsoft.com/en- us/library/dd465326.aspx

En la imagen anterior se muestra un ejemplo de transformaciones en el web.config.

Finalmente establecemos la información de la base de datos de origen:

  1. Marcamos la opción "Pull data and/or schema from an existing database"
  2. Seleccionamos las opciones de scripting de la base de datos, Solo el esquema o esquema y datos.
  3. Podemos agregar cualquier script de personalizado, presionando el botón Add Script.
Para terminar Ctrl+S o File > Save para guardar los cambios.

3) Construir el paquete

El último paso requerido (en lo que tiene que ver con el armado del paquete), es construirlo. Para ello nos posicionamos en el proyecto web, botón derecho sobre el mismo, y elegimos del menú contextual la opción "Build Deployment Package"


4) Implementar el paquete generado


Una vez que tenemos el paquete generado el ultimo paso es "instalarlo" en el servidor de producción. Para implementar este paquete es necesario que la herramienta Web Deploy esté instalada en el servidor de producción.

La instalación de dicho paquete se puede realizar utilizando la línea de comandos (con el archivo.cmd que se genera) o a través de la UI del IIS Manager.

Pueden encontrar mas información acerca de como instalar dicha herramienta en http://technet.microsoft.com/en-us/library/dd569059.aspx

Realmente el proceso es muy sencillo y como mencione anteriormente se puede hacer de dos maneras:

  1. Desde la consola, ejecutando el archivo .cmd que genera la herramienta
  2. Desde la UI de IIS como se muestra en la imagen a continuación

El proceso desde la UI es muy sencillo y básicamente nos pide la información que se necesita mediante pantallas autogeneradas que nos simplifican la tarea.




Recursos

Si tienen tiempo miren este Web Cast de Scott ... no tiene desperdicio.
http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx

Un Walk Through completito de esta herramienta
http://msdn.microsoft.com/en-us/library/dd483479.aspx

Excelente Blog con mucha documentación del tema http://vishaljoshi.blogspot.com/2011/07/documenting-key-end-to-end-deployment.html


Espero les haya gustado y les sea de utilidad, hasta la próxima!

No hay comentarios:

Publicar un comentario