¿Alguna vez te preguntaste cuanto tiempo perdés haciendo manualmente cada una de las tareas necesarias para realizar un despliegue o integrar distintas funcionalidades? ¿Acaso no existe alguna forma de ahorrarnos todos estos largos y tediosos pasos?
En este articulo vamos a ver que son los pipelines y como nos permiten automatizar cada uno de estos procesos, generando un marco de agilidad en nuestro ciclo de desarrollo.
En la actualidad existen muchas formas de desarrollar y de llevar adelante un proyecto de software. Independientemente de la metodología con la que trabajemos, a la hora de construir software existen ciertas tareas o pasos que son necesarios para garantizar el correcto funcionamiento de nuestra aplicación. Estas tareas van desde compilar el código y correr las pruebas unitarias y de integración, hasta realizar los convenientes despliegues en los distintos ambientes con los que trabajamos, como uno de testing o uno de producción.
Bajo un ciclo de desarrollo de software tradicional, todas estas tareas se hacen de forma manual, incluso existen equipos puntualmente dedicados a garantizar la correcta integración y posterior implementación:
Con el tiempo se han ido encontrando alternativas que buscan agilizar este ciclo y trabajar de forma mas eficiente, estableciendo un proceso que se encargue de realizar estas tareas una tras otra y de forma automática, una vez que se dispare un determinado evento como podría ser, por ejemplo, un push a un repositorio central del proyecto.
Estos procesos son denominados pipelines (o tuberías, en español) y se encargan de automatizar el ciclo de vida de nuestro software, desde la etapa de integración, compilado y ejecución de pruebas, hasta los despliegues e implementación. Esto lo consiguen estableciendo un orden de ejecución de las tareas o pasos una vez se active el pipeline.
El concepto de pipeline esta fuertemente relacionado con el de integración continua y distribución continua, ya que es utilizado como herramienta principal si decidimos trabajar con estos conceptos.
¿Cómo funcionan?
La siguiente imagen representa un pipeline de buildeo, utilizado para trabajar con integración continua:
Este pipeline se activa una vez se haga un push a cualquier rama en un repositorio central alojado en alguna plataforma online como GitHub o GitLab.
Su objetivo es ejecutar automáticamente las siguientes tareas:
1. Fusionar con una rama central la rama en la que estamos trabajando
2. Compilar el código
3. Buildear el proyecto
4. Ejecutar las pruebas unitarias
5. Ejecutar las pruebas E2E
Utilizando este pipeline, podemos detectar rápidamente cualquier error o conflicto que surgiera como consecuencia de integrar una nueva funcionalidad en la que estemos trabajando con el resto del proyecto. Al final del día, estaremos ganando tiempo y velocidad en el proceso de desarrollo de nuestro proyecto.
La siguiente imagen representa un pipeline de entrega, utilizado en proyectos donde se trabaja con entrega continua:
Este pipeline se activa una vez que se ejecuta un comando específico, luego despliega en testing, ejecuta pruebas y finalmente despliega en producción.
Herramientas como GitLab CI/CD, Jenkins o GitHub Actions nos permiten integrar/entregar continuamente utilizando pipelines como herramienta principal.
Los pipelines nos ofrecen la posibilidad de automatizar cualquier tarea o grupo de tareas de la forma en que consideremos necesario. Podemos utilizarlos forma combinada, teniendo uno para integración y otro para despliegues con el objetivo de ejecutarlos en diferentes instancias (de acuerdo a la necesidad del proyecto), o bien, unificar todos estos procesos en uno solo, obteniendo así un nuevo pipeline que con un único push haga todo lo anterior.
Si queremos mejorar la velocidad de nuestros despliegues y la calidad de nuestros desarrollos, utilizar pipelines para la integración y entrega continua nos será de gran utilidad.