Friday, January 6, 2017

GO Continuous Delivery, tu producto estará a la moda

En tiempos donde las exigencias de los mercados cambian y se transforman a una velocidad tan veloz que las empresas que se percatan de un cambio no pueden esperar a que alguien más realize algo mejor. En un mundo donde no hay plazos para entregar una nueva funcionalidad y no existen los clientes, que sin saber bien lo que quieren, que se encuentren pacientes mientras hay otra compañía que los desplaza y los puede dejar fuera de competencia. En escenarios donde los servicios proveídos se apoyan con Software a medida, no hay tiempo, lo requerido debe ser entregado en cualquier momento.

Prácticas Continuous Delivery


Entonces nos encontramos con herramientas y prácticas de entrega continua o Continuous Delivery por sus siglas en inglés, donde su enfoque es entregar en cualquier momento las funcionalidades nuevas o esos productos tan esperados.

A diferencia de las herramientas de integración continua como Jenkins encargado de facilitar y automatizar la unión del trabajo de diferentes desarrolladores, detectando errores e integrando rápidamente, por otro lado se encuentran las soluciónes de entrega continua que buscan asegurar que el producto sea liberado rápidamente y de forma segura en ambientes de producción en cualquier momento. Más que herramientas que faciliten hacer este trabajo, lo importante es familiarizarse también con las prácticas conocidas como "Continuous Delivery".

Es necesario mencionar que las prácticas de entrega continua no pueden funcionar aisladamente sin las de integración continua para lo cual es imprescindible contar con herramientas que automatizen estas tareas. Este post se dedica a hablar sobre la entrega continua utilizando GO Continuous Delivery (GO CD).

GO Continuous Delivery


GO CD es una herramienta Open Source que utiliza el concepto de Pipelines permitiendo dividir el proceso de deploy de un producto Software en varias etapas. Así busca facilitar la detección de problemas, además de la colaboración entre varios equipos encargados de entregar un producto Software de tal forma que hay visibilidad en el flujo de deploy.

Con respecto a la forma de ejecutar los jobs, éstos pueden ejecutar comandos maven, de python, linux o cualquier otra herramienta proveída por la máquina asignada donde que ejecuta las tareas.

Los Agentes


Despues de que el servidor encuentra que hay cambios en algún material, ya sea un repositorio de código fuente o un pipeline que ha finalizado su ejecución, el servidor desencadena uno o varios pipelines. Desde ahí, los pipelines son ejecutados por los agentes, que usualmente son otras máquinas que poseen los recursos para realizar tareas. Por ejemplo, maven, python, o cualquier otra instrucción proveída en un sistema operativo Linux.

Con ayuda de scripts, se le puede indicar al job los comandos que debe realizar para completar su objetivo, haciendo muy manipulable el trabajo asignado, además de facilitar el arreglo de errores. Los scripts poseen la secuencia de comandos para realizar alguna acción, por ejemplo: compilar un código fuente, obtener un artefacto compilado desde algún repositorio, colocarlo en algún lugar de la máquina e inicializarlo, etc.

La forma de desencadenar los pipelines en GO es proveyendo materiales a cada uno. Así, un pipeline se ejecuta al encontrar un cambio en un repositorio de código o incluso, al finalizar uno o varios pipelines.



Abstracción


A continuación se puede ver la subdivión de los pipelines:
- Multiples Pipelines corren en paralelo
- Multiples Stages dentro de un Pipeline corren secuencialmente
- Multiples Jobs dentro de un Stage corren en paralelo
- Multiples Tasks dentro de un Job corren secuencialmente

El diseño de los pipelines necesitan de una estructura consistente tomando ventaja de la abstracción proveída al momento de crear alguno de estos pasos, considerando también que los nombres de los pipeles, stages, etc. correspondan con lo que realmente están haciendo.

Conclusión


Sin duda es una herramienta a considerar si quieres acelerar el tiempo que toma la aplicación para subir a los ambientes de producción u otros. Su abstracción, flexibilidad para correr los pipelines y hacerles un seguimiento, scripts a ejecutar en los agentes, variables de ambiente, plugins, fácil de deployar y otras características más, lo convierten en una aplicación digna para que la consideres cuando quieras acelerar el tiempo que toma tu aplicación para subir a los ambientes de producción o cercanos a éste.