SecondNug Febrero 2012 - Automatización de despliegues
1. Automatización de
Despliegues
Jose Luis Soria
jlsoria@plainconcepts.com
@jlsoriat
2. Jose Luis Soria
• ALM Team Lead at Plain Concepts
• Professional Scrum Trainer
jlsoria@plainconcepts.com
http://geeks.ms/blogs/jlsoria
@jlsoriat #secondnug
3. Contenido (I)
• Por qué automatizar
• Automatización de entornos
– Lab Manager
– Proyectos de servidor de SQL Server
– Web Deploy
4. Contenido (II)
• Automatización de instalación
– MSBuild y TFS Build
– Versionado
– Proyectos de instalación
– Proyectos de base de datos
– MSDeploy
5. Contenido (III)
• Automatización de configuración
– Transformaciones de ficheros de configuración
– Gestión de datos
– Powershell
• Planes de contingencia
• Conclusiones
• Preguntas
7. El proceso típico de despliegue
• Montones de documentos a seguir
• Muchos pasos manuales
• Discusiones con otros departamentos
• Correcciones sobre la marcha
• Entornos en distintos estados
• Resultados impredecibles
• Largas noches sin dormir
8. Desventajas de los despliegues manuales
• Cada vez que despliego, puedo cometer errores
distintos
• El proceso no es repetible
• Hay que mantener documentación
• Se depende de personas concretas
• Es aburrido
• No hay garantías de que se siga el proceso
9. ¡Automatización!
• El proceso de despliegue se hace repetible y
auditable
• Está autodocumentado
• Se minimizan errores
• Se lanza con pulsar un botón
• No se depende de personas concretas
• La vuelta atrás se hace más sencilla
13. ¿Qué significa desplegar una aplicación?
Desplegar:
• Paso 1: Preparar el entorno en el que la aplicación
va a ser ejecutada: hardware, software,
infraestructura, servicios externos…
• Paso 2: Instalar la aplicación en el entorno
14.
15. ¿Qué significa desplegar una aplicación?
Desplegar:
• Paso 1: Preparar el entorno en el que la aplicación
va a ser ejecutada: hardware, software,
infraestructura, servicios externos…
• Paso 2: Instalar la aplicación en el entorno
• Paso 3: Configurar la aplicación, incluyendo datos
necesarios y estado
16.
17. ¿Qué significa desplegar una aplicación?
Desplegar:
• Paso 1: Preparar el entorno en el que la aplicación
va a ser ejecutada: hardware, software,
infraestructura, servicios externos…
• Paso 2: Instalar la versión correcta de la aplicación
en el entorno
• Paso 3: Configurar la aplicación, incluyendo datos
necesarios y estado
20. Automatización de entornos
• ¿Cómo aprovisiono los entornos?
• ¿Cómo despliego y configuro los prerrequisitos
(middleware) en las máquinas?
• ¿Cómo gestiono los entornos, una vez que están
en marcha?
21. (I) Aprovisionamiento y configuración de
servidores
• Opciones:
– Aprovisionamiento y configuración completamente
manual (no recomendable)
– Instalación y configuración remota desatendida
– Virtualización
– Cloud
22. Instalación remota desatendida
• Windows Deployment Services
http://bit.ly/wE6h8F
– Despliegue remoto de sistema operativo, incluyendo
drivers y configuración base
– Proveedor de PXE
– Las imágenes base se pueden crear y configurar
usando Hyper-V
23. Virtualización
• Hyper-V & System Center Virtual Machine
Manager http://bit.ly/wlaEUN
– Uso de plantillas y de instantáneas
• Para entornos de pruebas: Lab Management
http://bit.ly/wK6YO4
24. Cloud
• Azure www.windowsazure.com
– Ventajas similares a la virtualización
– Escalabilidad, disponibilidad y seguridad
proporcionadas por el proveedor
– El entorno está estandarizado
25. (II) Gestión de entornos
• Para entornos de pruebas: Lab Management
• Para entornos en general: System Center
Operations Manager http://bit.ly/o8vZYa, políticas
de Active Directory
27. Gestión de prerrequisitos (middleware)
• Bases de datos (SQL Server): proyectos de servidor
de Visual Studio http://bit.ly/wCu5ZW
• Servidores web (IIS): Web Deploy
http://www.iis.net/download/webdeploy
• PowerShell
28. Demo: proyectos de servidor de SQL Server,
Web Deploy
http://bit.ly/xvCl9W
30. ¿Qué necesito para instalar una aplicación?
• Construir la aplicación
• Asegurarse de que es la versión correcta
• Dotarla de un mecanismo de instalación
31. Construir la aplicación
• MSBuild http://bit.ly/IhQVT
– Plataforma estándar de construcción de .NET
– Lenguaje + herramienta de línea de comandos
– Extensible
• TFS Build http://bit.ly/hvTlnR
– Construcción desatendida en un entorno controlado
– Escalable a nivel empresarial
– Personalizable http://bit.ly/gLf3jl
33. Instalar la aplicación
• Crear scripts o instaladores para cada fase del
despliegue
• Elegir la tecnología apropiada para cada elemento
• Utilizar los mismos scripts para todos los entornos
• Usar la herramienta de empaquetado del sistema
operativo
• Hacer que el proceso de despliegue sea idempotente
• Comenzar desde el principio del proyecto e ir
evolucionando
34. Instalar la aplicación: versionado
• Es imprescindible versionar cada construcción,
para tener una visión clara de con cuál de ellas se
está trabajando en cada momento
• Versionado de ensamblados: AssemblyInfo
http://bit.ly/zmuW9e
• Versionado automático con TFS Build
– TFSVersion en Community Build Extensions
http://bit.ly/bS4XDK
38. Instalar la aplicación: bases de datos
• Herramientas de base de datos de Visual Studio
http://bit.ly/yECCtG
• Despliegue desatendido desde una construcción
automatizada: MSBuild, vsdbcmd
http://bit.ly/vB6G1
40. Instalar la aplicación: aplicaciones web
• Web Deploy http://bit.ly/cUOpfw
– Integrado con VS e IIS
– Empaquetado y despliegue local y remoto
– Incluyendo bases de datos
• Despliegue desatendido desde una construcción
automatizada: MSDeploy
43. ¿Por qué automatizar la configuración?
• Se evitan errores al cambiar de entorno, o incluso
de máquinas dentro del mismo entorno (ej.:
cluster)
• Se ahorra mucho tiempo
• No es necesario modificar ficheros en entornos de
producción
• Es muy fácil romper la aplicación por configuración
44. ¿Cómo hacer la configuración
automatizable?
• Identificar puntos en la aplicación susceptibles de
ser configurables (evitar hardcoding, etc.)
• Mantener la configuración en control de versiones
• No modificarla a mano
• Hacerla dependiente de la versión y entorno
• No repetirse
• Incluirla en el esfuerzo de pruebas
45. Configuración: transformaciones de ficheros
• Incluido en el Web Deployment Toolkit
http://bit.ly/pxs8NK
• Se define por cada configuración del proyecto
• También para proyectos no Web:
http://bit.ly/otg3b1
• Transformación desatendida desde TFS Build
47. Configuración: datos
• Data compare, incluido en las herramientas de
bases de datos de Visual Studio
http://bit.ly/xwhmoM
• Integrable en TFS Build: MSDeploy, vsdbcmd
49. Configuración: artefactos en general y
middleware
• Powershell http://bit.ly/fL1tcz
– Shell estándar de Windows
– Orientada a objetos
– Posibilidad de ejecución en remoto
– Snap-in’s para middleware
• Se puede ejecutar de forma desatendida desde
TFS Build
52. Planes de contingencias
• Es imprescindible tener un procedimiento claro de
vuelta atrás, especialmente en entornos de
producción
• Hay que tener en cuenta los datos y otros posibles
sistemas afectados
• La técnica más simple y efectiva suele ser desplegar
de nuevo la versión anterior; si el despliegue está
automatizado (los tres pasos), esto es muy sencillo
• Técnicas más avanzadas: Blue-Green deployments,
Canary Releasing
54. Conclusiones
• Casi todo es automatizable
• Puedes empezar a automatizar ya. Como muy tarde, la
segunda vez que te veas haciendo la misma tarea
manualmente
• La automatización de despliegues es necesaria para la
entrega continua (pero no suficiente)
• Es un esfuerzo que involucra a roles más allá del desarrollo
• Es responsabilidad de todos
• Es mejor automatizar los cambios a producción, que
hacerlos a mano
55. Recursos
• Continuous Delivery http://bit.ly/wdmkLZ
• Inside the Microsoft Build Engine
http://amzn.to/wZr5hp
• Powershell http://amzn.to/xBbqCV
• Professional ALM http://amzn.to/9jggZG
• www.memegenerator.net
• www.bitstrips.com
56. ¿PREGUNTAS?
• ALM Team Lead at Plain Concepts
• Professional Scrum Trainer
jlsoria@plainconcepts.com
http://geeks.ms/blogs/jlsoria Jose Luis Soria
@jlsoriat #secondnug ¡Gracias!
Calendario cursos Professional Scrum 2012 http://bit.ly/xc3rPE