Entrega continua (CD): avanzando en DevOps

La entrega continua agiliza los procesos por los que pasa un desarrollo hasta llegar a manos del usuario, algo imprescindible en un mundo tecnológico tan competitivo.

¿Qué es la entrega continua?

La entrega continua, o continuous delivery en inglés, es un enfoque en el que los equipos producen software en ciclos de vida cortos, asegurando que el software se puede entregar en cualquier momento y, cuando se haga, hacerlo manualmente.

Otra definición muy acertada es la que da Jez Humble en su libro Continuous Delivery :

La entrega continua es la habilidad de facilitar cambios de todo tipo (incluyendo nuevas características, cambios de configuración, soluciones de bugs y experimentos) a producción, o a los usuarios, de forma rápida, segura y sostenible.

Uno de los objetivos es que se puedan hacer despliegues de forma predecible, sin resultados inesperados (que tanto odiamos )

Para conseguirlo, es imprescindible que el equipo de desarrollo tenga claro que el código podrá ser entregado en producción en cualquier momento.

Por supuesto, dentro de este enfoque se cuentan con pruebas automatizadas, encargadas de asegurar un mínimo de calidad en el producto.

La entrega continua se puede considerar como una evolución de la integración continua, ya que ofrece una serie de pasos adicionales centrados en el que el producto llegue a manos del usuario.

Como viene siendo habitual en DevOps, la automatización es una de las claves para sustituir un desarrollo tradicional en cascada por estos enfoques más ágiles.

Continuous delivery

¿Qué ventajas tiene la entrega continua?

Las ventajas vienen de la mano de comprender que si, finalmente despliegas con mayor frecuencia, vas a obtener un mayor número de resultados y de feedback.

Es por esto que gracias la práctica de la entrega continua puedes:

  • Reducir el riesgo de lanzar nuevas versiones: Gracias a la mentalidad de que el código puede entrar en cualquier momento en producción y se pueden realizar más pruebas debido a la automatización, los lanzamientos son más seguros y previsibles.
  • Reducir el tiempo de entrega a producción: En comparación a desarrollos tradicionales en cascada, se puede obtener el producto mucho antes, por lo que las nuevas características que implementes llegarán más rápido a los usuarios. En un mundo tecnológico tan competitivo, esta ventaja es clave para superar a la competencia.
  • Aumentar la calidad de tus productos: La automatización de pruebas ofrece la gran ventaja de poder comprobar una mayor parte del código en menos tiempo y con menos esfuerzo. Por eso, puedes recibir el feedback de las pruebas antes, detectar errores a tiempo, y corregirlos mucho antes de que lleguen a los usuarios.
  • Reducir costes de desarrollo: Y es que un producto (no solo de software) tiene que ser rentable. Si consigues producir más en menos tiempo, consigues más productos en menos tiempo, lo que es igual a conseguir más resultados con menos dinero.
  • Usuarios más satisfechos con tu software: Ya que la agilidad en entregarles nuevas funcionalidades, repercute en agilidad para que ellos te devuelvan feedback, y por lo tanto, podrás crear productos más adaptados a sus necesidades.
  • Equipos más felices trabajando: Como consecuencia de todo lo anterior (mejores resultados, más rápido, sin contratiempos) te da una tranquilidad que desemboca en una gran satisfacción. Y todos trabajamos mejor cuando trabajamos contentos

Fases de la entrega continua

El ciclo de vida de la entrega continua contiene 3 fases:

Integración continua

En la integración continua, los equipos de desarrollo integran su trabajo de forma muy frecuente.

De esta forma, se pueden conseguir builds de forma muy rápida, que ya incluyen los test unitarios y de integración.

Una vez finalizada esta fase, tenemos un producto sencillo, pendiente de realizar más pruebas y entregar.

Pruebas de aceptación automatizadas

Las pruebas no son exclusivas de la entrega continua, ya se deben haber realizado pruebas unitarias y de integración.

Pero en este caso se añaden las pruebas de aceptación, que son aquellas que se confirman que el software cumple los requisitos que nos han solicitado.

Aunque este tipo de pruebas también se puede realizar de forma manual en fases posteriores, en esta fase se realiza de forma automatizada.

Este tipo de pruebas incluyen las pruebas de interfaz, y se pueden basar en las historias de usuario para validar que el producto es correcto.

Aprobar implementación

Después de acabar con las fases anteriores, ya tenemos un producto «entregable», con un buen número de pruebas superadas (y si no las ha superado, lo podremos arreglar antes, que es una de las cosas que más me mola de la entrega continua)

Es entonces el momento de realizar la implementación, de forma manual, en el entorno que deseemos.

En estos casos, puedes por ejemplo entregar en un entorno de pruebas o preproducción, para la realización de pruebas manuales, o realizar alguna demostración de producto.

También puedes hacer el despliegue en producción de forma más segura y rápida por haber hecho un buen trabajo en las fases anteriores.

Diferencias entre entrega continua y despliegue continuo

Si has entrado a leer este artículo, seguro que alguna vez has oído hablar de despliegue continuo.

Si bien son muy parecidos, de hecho, verás los dos con las siglas CD, no son sinónimos.

La diferencia radica en que, en la entrega continua, las implementaciones se realizan de forma manual. Normalmente esto se debe a peculiaridades en la infraestructura, o que se está aún en camino hacia el despliegue continuo.

Y es que, el despliegue continuo, se realiza de forma automatizada. Para ello es necesario tener muy bien definidas las fases, pipelines y entornos pero, como ya imaginarás, las ventajas son aún mayores.

Sobre el despliegue continuo ya hablaremos otro día, que da para mucho.

Herramientas para la entrega continua

Para la entrega continua contaremos básicamente, al ser un subproceso suyo, con las mismas herramientas que para integración continua.

Por eso te puedo recomendar:

Jenkins

Es Open Source, y la documentación que puedes encontrar es muy amplia.

Además, puedes ampliar sus funciones con la gran cantidad de plugins disponibles.

Bamboo

Si valoras la UX y te gusta trabajar con interfaces de usuario debes buscar una herramienta creada por alguna gran empresa, y aquí tienes la de Atlassian.

Deberás tenerla muy en cuenta si trabajas con otras herramientas de los de australianos: Jira, Confluence, etc… por su facilidad de integración con ellas.

Travis CI

También es Open Source, y aunque mi preferencia sigue siendo Jenkins, te puede venir bien si tu proyecto es libre, ya que puedes utilizar su plataforma Cloud.


¿Qué te parece lo más destacable de la entrega continua?

Fuentes

Lectura recomendada

G Suite: Qué es y por qué deberías usarlo ya (incluye regalo) G Suite ofrece un conjunto profesional de potentes herramientas ofimáticas enfocadas a aumentar nuestra productividad y facilitar el trabajo...colaborativo. Sigue leyendo y descubre por qué deberías usarlo.

Deja un comentario