Este documento describe los conceptos y prácticas del Continuous Delivery. Explica que el Continuous Delivery busca entregas de software frecuentes, baratas, rápidas y predecibles mediante la automatización del proceso de desarrollo e implementación. También describe técnicas como las tuberías de despliegue, las ramas cortas en Git, los pequeños cambios incrementales, y el uso de interruptores de características para introducir grandes cambios de forma gradual.
1. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Continuous Delivery
Sesión 9
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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
La “última milla”
3
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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Netflix como ejemplo ágil
5
Deploying the Netflix API
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. 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. 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. 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. 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. 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. 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
18. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Time To Resolve
18
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. 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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Implementación concreta
21
22. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Selección de la factoría concreta
22
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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Interruptores de características
24
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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Puesta en producción
26
Amazon Web Services - Elastic Load Balancing
27. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Sistema de canary releases
27
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. 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. 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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Tubería de despliegue básica
31
Jez Humble - Continuous Delivery
32. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Herramientas visuales
32
Go - ThoughtWorks
Jenkins / Hudson
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. 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. 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. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Ramas en git (2)
36
5 6
37. Metodologías Ágiles de Desarrollo de Software
Domingo Gallardo, DCCIA, Univ. Alicante
Merge
37
76
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. 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. 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. 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. 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. 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. 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. 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