A medida que sucede el avance tecnológico, cambia la forma en la que el mercado sirve sus productos. En un futuro no muy lejano las empresas tenderán a vender “DevOps”, cosa que conlleva una maduración de varias prácticas a tener en cuenta.

Continuous Delivery no tiene otra premisa que darle a nuestro servicio la capacidad de obtener un producto con el mínimo esfuerzo y asegurando el más alto índice de calidad.

Estamos ante dos serios problemas: ¿Cómo aseguramos que nuestros equipos generen calidad y la mantengan en el tiempo? Y si eso no alcanza, ¿Cómo hacemos para que nuestro producto sea entregado sin esfuerzo y de manera segura?

Para asegurar calidad y que esta calidad sea estable, existe una práctica llamada Continuous Integration, la cual nos asegura entre otras cosas:

  • Cada cambio en nuestro código es acoplado.
  • Análisis estático de código.
  • Tests unitarios y de integración.
  • Building automático.
  • Tests de regresión.
  • Tests de performance.

Lo importante de los puntos antes mencionados es que son ejecutados de manera automática y periódica, por lo que nuestro producto siempre se encuentra bajo un análisis tan riguroso como deseemos.

Tecnologías relacionadas

A la hora de implementar estos conceptos existen varias tecnologías que permiten hacer el trabajo más fácil, como por ejemplo Jenkins, una aplicación Web que ejecuta las tareas de manera automática. Gradle, por su parte, nos permite crear scripts orientados al Continuous Integration basados en Groovy. Sonar Qube analiza el código provisto y recomienda modificaciones, y la lista sigue.

Para hacer el proceso de entrega sea con el mínimo esfuerzo y seguro, la primera respuesta con la que nos encontramos es la de hacer de este un proceso automático, el cual pueda eliminar los errores humanos que pudieran ocurrir en el despliegue de la aplicación (ya sea por problemas de creación del binario o problemas de configuración). También es importante tener en cuenta lo costoso que es tener a una persona (que generalmente es la de más seniority) ocupada en dicha tarea, que puede llegar a tardar más de un día, dependiendo de la aplicación en cuestión.

Alguna de las tecnologías que nos permiten realizar esta tarea son: Puppet, utilizada para la configuración de entornos nuevos; Cargo, para desplegar aplicaciones nuevas; Octupus Deploy, Run Deck, etcétera.

Cuestiones implementación

La implementación de una solución de Continuous Delivery no es un método sencillo ni un producto cerrado puesto que depende de la tecnología que estemos utilizando para crear el producto que queremos entregar, o los distintos procesos por lo que decidamos que nuestra aplicación tome parte. Existen cinco puntos que nos definen de manera abstracta como debe ser una solución de Continuous Delivery:

  • Simplicidad, a la hora de definir el proceso debe ser simple para que sea de fácil entendimiento.
  • Mantenimiento, el proceso no es algo que quede estable, siempre es necesario agregar nuevos pasos o maneras de implementar la solución.
  • Escalabilidad, la idea de cada etapa del proceso debe ser pensado para que pueda acoplarse rápidamente a los cambios.
  • Operatividad, el proceso de continuous delivery debe poder ser ejecutado por cualquier integrante o cliente sin importar el skill que este tenga.
  • Estandarización, cuando implementamos una solución estas deberían ser las mismas para todos los casos similares.

A nivel técnico nos garantiza que esta calidad está asegurada, pero para el management es una herramienta fuerte para poder demostrar la calidad a los clientes, poder mostrar métricas y reportes de como la calidad es aplicada. Los puntos en los cuales es beneficioso utilizar este proceso son muchos y desde los más diversos, la contra es el esfuerzo implicado en esta solución, aunque a la larga es altamente beneficioso.