Continuous Delivery

45
Metodologías Ágiles de Desarrollo de Software Domingo Gallardo, DCCIA, Univ. Alicante Continuous Delivery Sesión 9

description

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)

Transcript of Continuous Delivery

Page 1: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Continuous DeliverySesión 9

Page 2: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 3: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

La “última milla”

�3

Page 4: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

JARJAR

JAR Base de datosde integración

Entornode integración

Deploy

BuildBase de datosde producción

Entornode producción

TestsOK

6 semanas

JARJAR

JARBuild

Deploy

Page 5: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Netflix como ejemplo ágil

�5

Deploying the Netflix API

Page 6: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Etsy como ejemplo ágil

�6Etsy’s Product Development with Continuous Experimentation

Page 7: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Etsy como ejemplo ágil

�7Etsy’s Product Development with Continuous Experimentation

Page 8: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 9: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 10: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 11: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 12: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 13: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Page 14: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Page 15: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Page 16: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Page 17: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Page 18: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Time To Resolve

�18

Page 19: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 20: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Ejemplo con interfaces y factorías

�20Core J2EE Patterns - Data Access Object

Page 21: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Implementación concreta

�21

Page 22: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Selección de la factoría concreta

�22

Page 23: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Interruptores de características Feature toggles

�23Etsy’s Product Development with Continuous Experimentation

Page 24: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Interruptores de características

�24

Page 25: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 26: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Puesta en producción

�26

Amazon Web Services - Elastic Load Balancing

Page 27: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Sistema de canary releases

�27

Page 28: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 29: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Cambios moviéndose a través de la tubería de despliegue

�29Jez Humble - Continuous Delivery

Page 30: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Trade-offs en la tubería de despliegue

�30Jez Humble - Continuous Delivery

Page 31: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Tubería de despliegue básica

�31Jez Humble - Continuous Delivery

Page 32: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Herramientas visuales

�32

Go - ThoughtWorksJenkins / Hudson

Page 33: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 34: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Sistema de Control de Versiones - Git

• El primer elemento de un sistema de continuousdelivery 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

Page 35: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Ramas en git (1)

�35

Git Documentation - Basic Branching and Merging

1

2

3

4

Page 36: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Ramas en git (2)

�36

5 6

Page 37: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Merge

�37

76

Page 38: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 39: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Línea principal con short-lived branches

�39

1 2 3

Atlassian Git Tutorials - Feature Branch Workflow

Page 40: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Modelo avanzado de ramas (1)

• Git es descentralizado

�40

Vincent Driessen - A successful Git branching model

Page 41: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

�41Vincent Driessen - A successful Git branching model

Page 42: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Modelo avanzado de ramas (3)

• Ramas de release

�42Vincent Driessen - A successful Git branching model

Page 43: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Modelo avanzado de ramas (4)

• Ramas con Fixes

�43

Vincent Driessen - A successful Git branching modelAtlassian Git Tutorials - Gitflow Workflow

Page 44: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo 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

Page 45: Continuous Delivery

Metodologías Ágiles de Desarrollo de SoftwareDomingo Gallardo, DCCIA, Univ. Alicante

Lecturas

• Jez Humble - Continuous Delivery, cap. 5 (pp. 105-120)• Vincent Driessen - A successful Git branching model

�45