Entrega Continua: herramientas y libros
DevOps ha dado lugar a una serie de metodologías que tienen como objetivo acelerar la entrega y la precisión, dando a los desarrolladores las herramientas que necesitan para entregar mejores productos, con menos errores, e implementar mejoras de forma continua. Y una de ellas es la entrega continua (más comúnmente conocida como Continuous Delivery/CD) – el tema del artículo de hoy.
Como sabemos, los objetivos generales del enfoque Agile del desarrollo de software son acelerar el tiempo de lanzamiento al mercado y mejorar la calidad del código, y el objetivo de la entrega continua es asegurarse de que el software esté siempre listo para entrar en producción.
¿Qué es la Entrega Continua / Continuous Delivery?
La Entrega Continua / Continuous Delivery (CD) es una práctica de ingeniería de software en la cual los equipos desarrollan, construyen, prueban y lanzan software en ciclos cortos, donde el objetivo es mantener el código en un estado desplegable en cualquier momento dado. Depende de la automatización en cada etapa para que los ciclos puedan ser rápidos y fiables. Esto no significa que el código o el proyecto esté completo al 100%, sino que los conjuntos de características disponibles son examinados, probados, depurados y listos para su despliegue, aunque es posible que no se despliegue en ese momento. Este enfoque ayuda a reducir el coste, el tiempo y el riesgo de entregar los cambios al permitir más actualizaciones incrementales a las aplicaciones en producción.
En teoría, con la entrega continua, puedes decidir lanzar de forma diaria, semanal, etc., o lo que mejor se adapte a los requerimientos de tu negocio. Sin embargo, si realmente deseas obtener los beneficios de la entrega continua, deberías desplegar a producción lo antes posible para asegurarte de lanzar pequeñas tandas que serán fáciles de solucionar en caso de que hayan problemas. La entrega continua permite a los desarrolladores automatizar las los tests más allá de las pruebas unitarias, de modo que puedan verificar las actualizaciones de las aplicaciones en varias dimensiones antes de lanzarlas. Estos tests pueden incluir UI testing, pruebas de integración, etc. Esto ayuda a los desarrolladores a validar más exhaustivamente las actualizaciones y a descubrir problemas. La entrega continua ayuda a las empresas a ser ágiles, haciendo posible la adaptación continua del software acorde con el feedback de los usuarios, los cambios en el mercado y los cambios en la estrategia de negocios.
Según Martin Fowler, la entrega continua permite:
- Tener un software desplegable a lo largo de su ciclo de vida
- Priorizar mantener el software desplegable por encima de trabajar en nuevas funcionalidades
- Obtener información rápida y automatizada sobre la disponibilidad de producción de los sistemas cada vez que alguien realiza un cambio en ellos.
- Realizar despliegues de cualquier versión del software en cualquier entorno bajo demanda al pulsar un botón
- Lograr una entrega continua mediante la integración continua del software realizado por el equipo de desarrollo, construyendo ejecutables y ejecutando pruebas automatizadas en dichos ejecutables para detectar problemas.
Beneficios clave de la entrega continua / continuous delivery
1. Reducción del riesgo de despliegue
Dado que está implementando cambios más pequeños, hay menos cosas que pueden salir mal y son más fáciles de arreglar.
2. Progreso creíble
Muchos stakeholders trackean el progreso mediante el seguimiento del trabajo realizado. Si “hecho” significa “los desarrolladores dicen que está hecho”, esto es mucho menos creíble que si se despliega en un entorno de producción o similar.
3. Feedback rápido del usuario
El mayor riesgo al realizar cualquier esfuerzo de software es terminar construyendo algo que no es útil. Cuanto antes y con más frecuencia se entregue software que funciona a usuarios reales, antes se obtendrá feedback para saber lo valioso que es realmente.
4. Mayor calidad
Cuando los desarrolladores tienen herramientas automatizadas que descubren regresiones en cuestión de minutos, los equipos se liberan para centrar sus esfuerzos en actividades de testing de alto nivel, como las pruebas de rendimiento y seguridad.
5. Costes reducidos
Cualquier producto o servicio de software exitoso evolucionará significativamente durante su vida útil. Al invertir en la construcción, prueba, implementación y automatización del entorno, se reduce sustancialmente el costo de hacer y entregar cambios incrementales en el software, eliminando muchos de los costos fijos asociados con el proceso de lanzamiento.
6. Equipos más felices
Varias investigaciones han demostrado que la entrega continua hace que las entregas sean menos dolorosas y reduce el agotamiento del equipo. Además, cuando se lanzan versiones con más frecuencia, los equipos de entrega de software pueden involucrarse más activamente con los usuarios, aprender qué ideas funcionan y cuáles no, y ver de primera mano los resultados del trabajo que han realizado.
7. Proceso de lanzamiento de software automatizado
La entrega continua permite que tu equipo construya, pruebe y prepare automáticamente los cambios de código para su lanzamiento a producción, de modo que tu entrega de software sea más eficiente y rápida.
Herramientas de entrega continua (CD)
Existen en el mercado numerosas herramientas que realizan los diferentes procesos de entrega continua:
- Top Overall – Buddy
- Contenedores de Software – Docker
- Herramientas de construcción – Ant, Rake, Maven
- Herramientas de revisión de código – SonarCube
- Code Insight – Fisheye
- Integración continua – Jenkins, Gitlab, Bamboo
- Herramientas Cloud IaaS & PaaS – Google App Engine, AWS, Windows Azure, Heroku
- Automatización de la infraestructura – Terraform
- Gestión de dependencias – Nexus
- Integrated Development Environment (IDE) – JetBrains, Visual Studio
- Seguimiento de problemas – JIRA, Greenhopper
- Testing – AntUnit, Cucumber, JMeter, SoapUI, Selenium
- Sistema de control de versiones – GIT, SVN/Subversion, Perforce
Libros de entrega continua
1. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler) por Jez Humble y David Farley
Conseguir que el software sea entregado a los usuarios es a menudo un proceso doloroso, arriesgado y que requiere mucho tiempo. Este nuevo e innovador libro establece los principios y las prácticas técnicas que permiten una entrega rápida e incremental de nuevas y valiosas funcionalidades de alta calidad a los usuarios. A través de la automatización del proceso de construcción, implementación y test, y la mejora de la colaboración entre desarrolladores, probadores y operaciones, los equipos de entrega pueden conseguir que los cambios se publiquen en cuestión de horas, a veces incluso minutos, sin importar el tamaño del proyecto o la complejidad de su código base. Jez Humble y David Farley comienzan presentando las bases de un proceso de entrega rápido, fiable y de bajo riesgo. Luego, introducen el “deployment pipeline”, un proceso automatizado para gestionar todos los cambios, desde el check-in hasta el lanzamiento. Finalmente, discuten el “ecosistema” necesario para apoyar la entrega continua, desde la gestión de la infraestructura, los datos y la configuración hasta la gobernabilidad. Los autores presentan las técnicas más avanzadas, incluyendo la gestión automatizada de la infraestructura y la migración de datos, y el uso de la virtualización. Para cada una de ellas, revisan los temas clave, identifican las mejores prácticas y demuestran cómo mitigar los riesgos.
2. Continuous Delivery CD A Complete Guide – 2019 Edition por Gerardus Blokdyk
Todas las herramientas necesarias para una autoevaluación en profundidad de la entrega continua. Con 934 preguntas nuevas y actualizadas basadas en casos concretos, organizadas en siete áreas centrales de diseño de procesos, esta Autoevaluación le ayudará a identificar las áreas de Entrega Continua CD en las que se pueden realizar mejoras.
3. Continuous Delivery with Docker and Jenkins: Create secure applications by building complete CI/CD pipelines, 2nd Edition por Rafal Leszko
Continuous Delivery with Docker and Jenkins, segunda edición, explicará las ventajas de combinar Jenkins y Docker para mejorar el proceso continuo de integración y entrega del desarrollo de una aplicación. A continuación, aprenderás cómo garantizar una rápida implementación de la aplicación con los contenedores Docker junto con el escalado de Jenkins utilizando Kubernetes. Después, conocerás cómo desplegar aplicaciones utilizando imágenes Docker y probándolas con Jenkins. Hacia el final, el libro tocará la base con las partes que faltan en el pipeline de CD, que son los entornos y la infraestructura, el versionado de las aplicaciones y las pruebas no funcionales. Al final del libro, se mejorará el flujo de trabajo de DevOps integrando las funcionalidades de Docker y Jenkins.