Continuous Delivery

600 views

Published on

Sesión 6 del curso Metodologías Ágiles de Desarrollo de Software de la Universidad de Alicante (http://www.dccia.ua.es/dccia/inf/asignaturas/MADS/2013-14)

Published in: Software
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
600
On SlideShare
0
From Embeds
0
Number of Embeds
43
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Continuous Delivery

  1. 1. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Continuous Delivery Sesión 9
  2. 2. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Valores del desarrollo ágil • Valor del manifiesto ágil: “Working 
 software” • El proyecto crece incrementalmente,
 con un flujo continuo de cambios • Entregas rápidas para obtener feedback 
 lo antes posible • Optimizar el flujo desde que se empieza 
 una historia hasta que se entrega 
 (Kanban) 2
  3. 3. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante La “última milla” 3
  4. 4. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante No es ágil • Tardar 6 semanas en integrar un macro-proyecto formado por 5 proyectos independientes porque no se habían probado las conexiones entre los módulos • Tardar 3 semanas en lanzar una nueva versión de un proyecto porque se han detectado fallos al instalarlo en el entorno de producción • Tener que esperar 1 semana a que se realicen todas las pruebas de aceptación al nuevo release antes de seguir desarrollando nuevas funcionalidades en el proyecto 4 JAR JAR JAR Base de datos
 de integración Entorno
 de integración Deploy Build Base de datos
 de producción Entorno
 de producción Tests
 OK 6 semanas JAR JAR JAR Build Deploy
  5. 5. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Netflix como ejemplo ágil 5 Deploying the Netflix API
  6. 6. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Etsy como ejemplo ágil 6 Etsy’s Product Development with Continuous Experimentation
  7. 7. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Etsy como ejemplo ágil 7 Etsy’s Product Development with Continuous Experimentation
  8. 8. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante ¿Qué es continuous delivery? • Conseguir una puesta en producción (release) del software: • Poco arriesgada • Frecuente • Barata • Rápida • Predecible • Reproducible • “Reduce the cost, time, and risk of delivering incremental changes to users” ! • “How long would it take your organization to deploy a change that involved just one single line of code? Do you do this on a repeatable, reliable basis?” 8 Mary and Tom Poppendieck - Implementing Lean Software Development, p59. Jez Humble - Adopting Continuous Delivery
  9. 9. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante DevOps • Developers • Su trabajo es añadir nuevas características • Trabajan en entornos locales (“en mi máquina funciona”) • Utilizan herramientas y lenguajes que permiten abstraer y automatizar • Operations: • Su trabajo es mantener el sitio web seguro, estable y rápido • Detectar problemas, apagar fuegos • DevOps: nueva filosofía de trabajo, donde los desarrolladores y operadores trabajan en conjunción • Automatización • Infrastructure-as-code • Herramientas: Chef, Vagrant, … 9
  10. 10. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Ventajas del continuous delivery • Estabilidad y confiabilidad en el proceso de despliegue y lanzamiento • Feedback continuo • Cuanto antes se detecta un error es más fácil encontrar el fallo (Time to Resolve) • Mejora la calidad del producto 10
  11. 11. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Algunas técnicas • Pequeños cambios que se despliegan continuamente • Todos los builds son candidatos al release • Todo en el control de versiones (se debe poder probar cualquier release) • Tuberías de despliegue (deployment pipelines) • Integración continua: automatización de builds, tests, despliegues, entornos 11
  12. 12. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Pequeños cambios que se despliegan continuamente 12 John Allspaw - http://www.slideshare.net/jallspaw/ops-metametrics-the-currency-you-pay-for-change
  13. 13. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante
  14. 14. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante
  15. 15. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante
  16. 16. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante
  17. 17. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante
  18. 18. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Time To Resolve 18
  19. 19. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante ¿Y los grandes cambios? • Los incrementos pequeños no significan dejar de trabajar en características que necesiten muchas modificaciones • Es posible ir desarrollando, probando y colocando las piezas para que el sistema evolucione hacia un momento futuro en sea fácil introducir una característica totalmente nueva • Buen diseño de código, por ejemplo seleccionar una implementación concreta utilizando interfaces y factorías • Pequeños cambios en las APIs compatibles con los tests de regresión • Interruptores de características 19
  20. 20. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Ejemplo con interfaces y factorías 20 Core J2EE Patterns - Data Access Object
  21. 21. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Implementación concreta 21
  22. 22. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Selección de la factoría concreta 22
  23. 23. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Interruptores de características
 Feature toggles 23 Etsy’s Product Development with Continuous Experimentation
  24. 24. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Interruptores de características 24
  25. 25. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Botón de release • El sistema de continuous delivery debería permitir que en cualquier momento negocio pulsara el “botón de release” y pudiera poner en producción el build seleccionado • El sistema de entregas continuas nos asegura de que todos los builds disponibles ya han pasado con éxito todos los tests de la tubería de despliegue (deployment pipeline) 25
  26. 26. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Puesta en producción 26 Amazon Web Services - Elastic Load Balancing
  27. 27. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Sistema de canary releases 27
  28. 28. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Deployment pipeline • Una implementación automatizada del proceso de: • construir • desplegar • probar • lanzar
 • Una tubería de despliegue garantiza: • Visibilidad • Feedback • Control 28 nuestro sistema
  29. 29. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Cambios moviéndose a través de la tubería de despliegue 29 Jez Humble - Continuous Delivery
  30. 30. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Trade-offs en la tubería de despliegue 30 Jez Humble - Continuous Delivery
  31. 31. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Tubería de despliegue básica 31 Jez Humble - Continuous Delivery
  32. 32. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Herramientas visuales 32 Go - ThoughtWorks Jenkins / Hudson
  33. 33. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Prácticas de la tubería de despliegue • Solo construir los binarios una vez • Desplegar de la misma forma en todos los entornos • Smoke-Test Your Deployments • Desplegar en una copia de producción • Cada cambio debería propagarse instantánemente por la tubería • Si falla cualquier parte de la tubería, parar la cadena 33
  34. 34. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Sistema de Control de Versiones - Git • El primer elemento de un sistema de continuous
 delivery es un sistema de control de versiones • Git es un Sistema de Control de Versiones 
 Distribuido (DVCS en inglés) • Permite clonar repositorios, hacer commits en 
 la versión clonada y publicar los cambios, 
 sincronizando los commits • Una de las características principales 
 de Git es la facilidad de gestión de 
 ramas y de forks • Gran variedad de posibles 
 flujos de trabajo 34
  35. 35. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Ramas en git (1) 35 Git Documentation - Basic Branching and Merging 1 2 3 4
  36. 36. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Ramas en git (2) 36 5 6
  37. 37. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Merge 37 76
  38. 38. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Flujos de trabajo • Distintas opciones posibles • Recomendación de Fowler y Humbler: “Everyone Commits To the Mainline Every Day” • Una única rama de desarrollo principal, en la que todos los desarrolladores hacen commit a diario • La rama de desarrollo se despliega diariamente en el servidor de integración continua • Ventaja: los errores se encuentran rápidamente y hay una sensación de progreso compartido • Es posible definir short-lived branches, ramas locales en las que se trabaja durante unos pocos días y que después se integran en la rama principal 38
  39. 39. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Línea principal con short-lived branches 39 1 2 3 Atlassian Git Tutorials - Feature Branch Workflow
  40. 40. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Modelo avanzado de ramas (1) • Git es descentralizado 40 Vincent Driessen - A successful Git branching model
  41. 41. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Modelo avanzado de ramas (2) • Dos ramas long-lived: 
 master (donde van los releases) y 
 develop (donde está el último build) ! ! ! ! ! • Ramas con 
 características en develop 41 Vincent Driessen - A successful Git branching model
  42. 42. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Modelo avanzado de ramas (3) • Ramas de release 42 Vincent Driessen - A successful Git branching model
  43. 43. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Modelo avanzado de ramas (4) • Ramas con Fixes 43 Vincent Driessen - A successful Git branching model Atlassian Git Tutorials - Gitflow Workflow
  44. 44. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Posibilidad de recuperar cualquier release • El sistema de control de versiones permite poder recuperar cualquier release previa, probarla y reparar bugs que pueda contener • Las versiones tienen nombres únicos (números correlativos) en un sistema de control de versiones • En el SCV se guarda toda la información adicional: ficheros de configuración de la aplicación, configuración de los distintos entornos en los que se va a desplegar la aplicación • Necesaria la automatización de la construcción de entornos de despliegue a partir de la información en el SCV 44
  45. 45. Metodologías Ágiles de Desarrollo de Software
 Domingo Gallardo, DCCIA, Univ. Alicante Lecturas • Jez Humble - Continuous Delivery, cap. 5 (pp. 105-120) • Vincent Driessen - A successful Git branching model 45

×