DevOps: CI/CD en proyectos de desarrollo ágil

En el desarrollo ágil de proyectos de software, la calidad del resultado, la velocidad de entrega del producto y la tolerancia a fallos son aspectos fundamentales para el éxito de los mismos. En este contexto, DevOps (Development – Operations) ha surgido como un enfoque integral que busca mejorar la colaboración entre los equipos de desarrollo y de operaciones. Su principal objetivo es permitir entregas ágiles de software sin perder la estabilidad de las operaciones de la organización.

Al implementar DevOps, se busca cumplir con los principios establecidos en el Manifiesto Ágil. Particularmente, el principio que enfatiza la entrega temprana y continua de software con valor para satisfacer al cliente se alinea perfectamente con la filosofía de DevOps de ofrecer cambios de manera rápida y confiable.

Dentro de DevOps, surge un término importante “pipelines” que se define como una serie de pasos automatizados que permiten la integración continua de software (CI) y la entrega o despliegue continuo del mismo (CD). Esto asegura que el código se incorpore, pruebe y despliegue de forma ininterrumpida, facilitando a los equipos de desarrollo la entrega ágil y fiable de cambios.

DevOps no se trata simplemente de adoptar nuevas herramientas tecnológicas y acelerar procesos, sino de un cambio cultural en el cual se busca promover la comunicación, la colaboración entre los equipos. Los procesos de DevOps no son estáticos, sino más bien orgánicos y evolutivos. Cada equipo de desarrollo tiene sus propias necesidades y desafíos únicos, por lo que no existe una receta mágica o un enfoque único que funcione para todos.

El resultado de aplicar DevOps en una organización será una mayor agilidad, resiliencia y capacidad de innovación.

Integración Continua (CI)

Este proceso tiene su origen con la metodología ágil Extreme Programming, la cual busca la entrega de software de alta calidad de manera rápida y continua. CI busca integrar el trabajo de cada uno de los desarrolladores constantemente. Cada integración debe estar respaldada por pruebas automatizadas que permitirán detectar errores para corregirlos lo antes posible. 

El objetivo principal de CI es reducir el riesgo de errores y conflictos de integración que dificulten el progreso de un proyecto. Una de las razones para adoptar Integración Continua (CI) es evitar el temido «Big Bang Integration», es decir, a la práctica de integrar grandes volúmenes de código de diferentes desarrolladores o equipos al final del ciclo de desarrollo, en lugar de integrarlo de manera continua a lo largo del proceso.

Trunk Based Development (TBD) es una estrategia de desarrollo de software que fomenta la integración continua al reducir la complejidad de fusionar cambios y alentar a los equipos a integrar su trabajo con frecuencia en la rama principal, por lo que el CI está estrechamente relacionado a TBD.

Entrega Continua (CD)

Cuando el código pasó por el CI, todos los miembros del equipo de desarrollo tendrán disponible los últimos cambios del código, lo cual es muy útil. Pero el desarrollo de software tiene que seguir su ciclo de vida, y precisamente esa es la ayuda que nos va a dar esta primera variante del CD, que se define como una serie de pasos automatizados a seguirse para el que el código se encuentre en un estado listo para desplegar, es decir, todos sus artefactos (.jar, .war, imágen de contenedor) listos para que alguien tome la decisión y los despliegue en un servidor.

Despliegue Continuo (CD)

Esta segunda variante de CD es el complemento de la primera, con la gran diferencia que en este caso, no solo se busca dejar los artefactos listos para que alguien los despliegue, sino que el despliegue en el servidor es automático.

Para lograr esto, es fundamental contar con las herramientas y/o infraestructura adecuadas que permitan realizar cambios sin afectar los servicios en producción, lo que se conoce como despliegue sin tiempo de inactividad (Zero-Downtime Deployment).

La idea detrás del Zero-Downtime Deployment es asegurar que los usuarios finales puedan continuar utilizando la aplicación sin experimentar ningún tiempo de inactividad, esto se logra mediante la implementación de estrategias y técnicas específicas que permiten desplegar las nuevas versiones de la aplicación, entre las estrategias más comunes se encuentran:

  • – Blue-green deployment: Despliega dos entornos de producción, donde uno está activo y otro se actualiza. Una vez probada la nueva versión, el tráfico se redirige al nuevo entorno.
  • – Canary deployment: Implementa una nueva versión inicialmente para un pequeño grupo de usuarios o servidores, permitiendo probarla antes de implementarla completamente.
  • – Rolling deployment: Despliega nuevas versiones de la aplicación en etapas o secuencialmente en diferentes partes de la infraestructura, manteniendo la aplicación en línea durante todo el proceso.

Volviendo a CI y CD, contamos con varias herramientas en el mercado que nos pueden ayudar a correr pipelines en nuestros proyectos: Jenkins, GitLab, Travis CI, CircleCI, Spinnaker, AWS CodeDeploy, Azure DevOps, entre otras.

Particularmente “GitLab” es una herramienta que para la empresa Software Evolutivo es una de las mejores no solo para DevOps, sino también para la gestión y planificación de proyectos de software. Seguramente, pronto estaremos profundizando sobre esta herramienta en otro blog que te dejaremos en las lecturas recomendadas.

¿Cómo diseñar un pipeline de CI/CD para un proyecto?

  • – Identifica el flujo de trabajo y el ciclo de vida completo de tu proyecto desde el momento cero hasta el momento en que este sale a un ambiente de producción o cualquiera que sea el ambiente objetivo.
  • – Determina los pasos que tu pipeline debería seguir para que el ciclo de vida que identificaste pueda ser automatizado.

En este punto deberías tenerlo todo sentado en papel, sigamos:

  • – Considera el estado y las características tecnológicas de tu proyecto.
  • – Investiga las herramientas que te permitirán implementar tu pipeline (valida que los recursos tecnológicos y económicos requeridos estén a tu alcance).
  • – Define las herramientas a utilizar.

Es momento de desarrollar, y para esto se sugiere lo siguiente:

  • – Incluye un paso a la vez a tu pipeline, pruébalo y valida que cada paso logre su objetivo.
  • – Empieza por implementar el CI desde lo más simple y fundamental para que puedas continuar (compilación, tests).
  • – Continúa por un CD de delivery. Lograr que tu aplicación genere y suba su artefacto en el repositorio que deseas, será un gran hito.
  • – Cuando tengas el artefacto en el repositorio deberás buscar la manera adecuada de que tu repositorio se conecte a tu servidor donde harás el despliegue.

Y por último, busca siempre la retroalimentación de tu equipo con el objetivo de mejora continua.

Desafíos al implementar DevOps

  • – Superar la resistencia a los cambios y fomentar una cultura de colaboración y responsabilidad compartida.
  • – Lograr la automatización completa de los procesos de desarrollo, pruebas y despliegue.
  • – Comunicar efectivamente los beneficios de DevOps y proporcionar capacitación y apoyo para la transición.
  • – Integrar prácticas de seguridad y cumplimiento sin comprometer la velocidad de entrega.
  • – Establecer una estrategia de monitoreo y retroalimentación continua para mejorar el rendimiento y la calidad del software.
  • – Diseñar una infraestructura y procesos que puedan crecer y adaptarse a medida que los proyectos y equipos evolucionan.

En conclusión, DevOps y CI/CD son dos conceptos sumamente relacionados que se basan en los principios de colaboración, automatización y entrega continua para impulsar la excelencia en el desarrollo y entrega de software en entornos ágiles.

Conoce nuestros servicios

Cultura DevOps

Impulsa la colaboración, agilidad y excelencia

Transforme su equipo en un motor de entrega continua y logre resultados sorprendentes.

leave a comment