Skip to main content

Implementación de Deployment Pipeline en DevOps (como nadie te lo había contado) – Parte II

Si en el post anterior veíamos la fase del Diseño de la Deployment DevOps, en éste vamos a definir la etapa propiamente dicha de implementación de la Deployment Pipeline.

Implementación de la Deployment Pipeline

Cuando ya se ha diseñado la deployment pipeline se debe proceder a su implementación, habiendo diferentes alternativas. Yo voy a comentar el uso de Jenkins y varios plugins para la implementación de pipelines. En este post únicamente voy a indicar cómo se puede implementar, los detalles de la implementación los comentaré en artículos posteriores.

Mi recomendación es que la implementación de la pipeline se haga de modo iterativo e incremental, dando pequeños pasos e incorporando las distintas tareas a la pipeline.

Teniendo en cuenta que el servidor de control de versiones tiene que ser la única fuente de verdad del proceso vamos a utilizar la capacidad de Jenkins de almacenar la descripción de la pipeline en un jenkinsfile. La documentación de su uso está disponible en Jenkins – Pipeline.

Jenkins Pipeline

En este ejemplo se observa que la pipeline se ha ejecutado sin problemas. Si por ejemplo obtuviéramos un error al realizar el smoke test del despliegue en el entorno de test veríamos lo siguiente:

Pipeline Error

De esta manera el equipo vería inmediatamente que ha ocurrido algún problema con el despliegue.

Evidentemente la pipeline se para y no se ejecutan los pasos siguientes, evitando que el error se propague a los siguientes entornos.

En esta pipeline he incluido un paso de confirmación manual que permite controlar si efectivamente quiero que el cambio se propague a producción o no:

Pipeline Confirmation

Con este paso de confirmación puedo controlar si realmente quiero promocionarlo o no. Si no existiera este chequeo manual en vez de Continuous Delivery estaría implementando Continuous Deployment ya que cualquier cambio que se hiciera sobre el servidor de versiones sería susceptible de llegar a producción de manera automática si consigue pasar todas las validaciones.

Consideraciones a la hora de montar la Deployment Pipeline

Como hemos visto, lo primero que debemos hacer es, a partir de nuestro Value Stream Map, analizar qué parte del mismo es automatizable y modelarlo con una herramienta que nos permita automatizar tareas y presentarlas de forma gráfica. Este último punto no es estrictamente necesario, pero favorece en gran manera el feedback ya que de un simple vistazo se observa el estado de la pipeline.

Como comentábamos en el post de utilizar un equipo específico de DevOps, una de las tareas principales de este equipo es diseñar, implementar y mantener esta pipeline. Una vez hecho esto, es labor del equipo de desarrollo/operaciones asegurar que el estado de la pipeline sea siempre correcto. Todo el equipo es dueño y responsable de la pipeline y de su estado.

Para montar la pipeline mi recomendación es empezar con una definición esqueleto que muestre las etapas y de manera incremental e iterativa ir añadiendo tareas dentro de las etapas.

El andon cord o stop the line

Un elemento importante a la hora de trabajar con la pipeline es que si un determinado momento la pipeline pasa a un estado fallido (pasa a rojo) todo del equipo debería parar hasta que la pipeline vuelva a estado normal (vuelva a verde). Esta manera de trabajar es el equivalente al uso del andon cord en el proceso de producción de Toyota – TPS por el cual cada trabajador puede parar la línea de fabricación completa en el caso de que detecte un error que pueda afectar a la calidad del producto. De hecho, se dice que en una planta de fabricación de Toyota se puede tirar del andon cord miles de veces al día!

Este concepto parece radical pero tiene enormes beneficios. Entre ellos, favorece el swarming y con él, el trabajo en equipo, a la vez que asegura que siempre disponemos de una línea capaz de entregar valor a producción.

Resumiendo

En este post hemos visto una breve introducción de qué es una Deployment Pipeline y cuáles son los beneficios de su uso. Se ha presentado un pequeño ejemplo de implementación basado en la herramienta Jenkins. También se ha introducido el concepto del andon cord, fundamental cuando se trabaja con la deployment pipeline.

En futuros artículos entraremos en detalle en algunas de las etapas analizando distintas opciones de implementación de la Deployment Pipeline con Jenkins.

Emiliano Sutil es Project Manager en Xeridia y experto en DevOps