Integración continua y entrega continua (CI/CD)

DESARROLLO WEB, INFRAESTRUCTURA.
blog cicd

Cada vez son más las organizaciones que se benefician al adoptar la integración continua y la entrega continua, conocidas como CI/CD. Estas prácticas son claves para darle agilidad, velocidad y mayor calidad al software que transforma las empresas.

Adoptamos CI/CD para entregar software más rápido, más frecuentemente y con menos errores.

Algunas ventajas de adoptar las prácticas CI/CD

  • Entregar o liberar código de forma inmediata, sin esperar a acumular muchas funcionalidades, tickets o desarrollos independientes.

  • Menor esfuerzo y más confianza al momento de desplegar código en la etapa de producción.

  • Se facilita el trabajo en equipo y la comunicación entre los desarrolladores de software. Así se puede validar el enfoque deseado antes de trabajar en algo que no resuelva realmente el problema para los usuarios.

  • Mayor visibilidad del código que se está desarrollando. Cada lanzamiento de una aplicación contendrá en el código un número pequeño de cambios, facilitando identificar la causa de un problema.

  • La automatización de las pruebas garantiza que estas se realicen con coherencia, haciendo que los resultados sean más confiables. Como las pruebas automatizadas son más rápidas de ejecutar que las manuales, es posible realizarlas con más frecuencia, generando un código de mayor calidad al descubrirse antes los errores y facilitar su corrección.

  • Si algún cambio nuevo en el código estropea la aplicación, ésta podrá devolverse de inmediato a su estado anterior, desplegándose de nuevo la última compilación exitosa, evitando interrupciones en la operación.

  • En cada etapa del proceso de desarrollo se puede generar una gran cantidad de registros, siendo una rica fuente de información para estudiar el comportamiento de la aplicación.

A través de la metodología CI/CD el equipo tiene completo control sobre el proceso de desarrollo y producción, probando e integrando cambios para verificar que todo funcione correctamente. 

¿Cuánto esfuerzo le está requiriendo desplegar código?

El nivel de esfuerzo que requiere integrar y desplegar código pone en evidencia el nivel de madurez de sus procesos técnicos.

Hacer una sola integración de código al final del proceso de desarrollo, acumular código para desplegar cada semana o cada quince días, o en general una tasa alta de fallas en los despliegues, son un indicador importante de una oportunidad de mejora.

La Integración Continua (CI) es una práctica que incrementa la eficacia y la eficiencia de los resultados del equipo de desarrolladores. Se trata de  combinar, de forma periódica y en un repositorio central, los cambios realizados en el código de un proyecto, para luego ejecutar pruebas y así detectar y reparar errores lo antes posible.

Esta metodología permite mejorar la calidad del código, entregar avances al cliente más frecuentemente  y trabajar ágilmente con nuevos participantes del equipo, incluso si estos no conocen en profundidad el proyecto completo.

 “Detectar problemas de código es mucho más fácil con CI, evitando que estos errores lleguen a los clientes”.

¿Qué hacer si hay una brecha de conocimiento?

Muchas organizaciones que buscan implementar estas metodologías fracasan en el proceso por no tener personas dentro del equipo con los conocimientos necesarios para el diseño de la solución CI/CD adecuada.

Implementar este proceso es difícil si no se cuenta con una guía que contenga la información adecuada. Leer sobre el tema puede ayudar mucho, sin embargo, es mucho mejor y más eficiente contar con la asesoría de un experto en el tema.

Uno de los errores más frecuentes en la implementación de estas metodologías es la correcta automatización que requiere el periodo de prueba. Una de las preguntas comunes que surgen es: “¿Cómo puedo integrar pruebas automatizadas en mi solución CI/CD ?” 

Automatizar las pruebas de código es complejo pues requiere contar con herramientas adecuadas para el equipo y el tipo de proyecto, automatizar tareas repetitivas y tener procesos para revisar, planear y re-evaluar cada paso de la metodología.

[Banner]ebook #1

¿Qué es la Integración Continua (Continuous Integration/CI)?

Con la Integración Continua los desarrolladores integran frecuentemente su código a la rama principal de un repositorio común. 

En lugar de desarrollar partes del código de manera aislada e integrarlas al final del ciclo de producción, un desarrollador contribuirá con cambios a una parte del repositorio varias veces al día.

La idea aquí es reducir los costos de integración, haciendo que los desarrolladores realicen integraciones más rápidamente y con mayor frecuencia. En la práctica, un desarrollador a menudo descubrirá conflictos entre el código nuevo y el existente en el momento de la integración. 

Si esta se realiza temprano y con frecuencia, la expectativa es que la resolución de conflictos será más fácil y menos costosa.

Requisitos para la Integración Continua

  • El equipo debe crear pruebas automatizadas para detectar inconsistencias en los nuevos desarrollos. Para ello, cada tarea se debe dividir en segmentos más pequeños para que sea más fácil completar y probar el conjunto de cambios para su confirmación.

  • Necesitará un servidor de integración continuo que permita el monitoreo y la ejecución de las pruebas de forma automática para cada nueva confirmación que se logre.

  • Los desarrolladores deben fusionar los cambios de forma rápida y continua, por lo menos una vez por día.

  • Es esencial tener un sistema de control de versiones. Si se dispone de uno, se deberá obtener todo lo que contiene e implicar a todos a que lo usen.

  • Además de compartir los cambios en el código con los participantes en el proyecto, se debe comprobar que la aplicación pueda compilarse con los últimos cambios. Aunque esto pueda hacerse manualmente, es más fácil y eficiente que la compilación se haga automáticamente, utilizando para ello un servidor de integración continua.

  • Para mayor confiabilidad, es importante ejecutar varias pruebas, siendo más eficiente ejecutarlas de forma automática que de modo manual.

  • Solo vale la pena automatizar las compilaciones y pruebas si se va a hacer algo con la información recibida. Las herramientas de integración continua ofrecen una gran variedad de mecanismos de retroalimentación.

Beneficios de la Integración Continua

  • Hace que el desarrollo de software sea más fácil, rápido y menos riesgoso para los desarrolladores. Al automatizar las compilaciones y las pruebas, los desarrolladores pueden realizar modificaciones más pequeñas y confirmarlas con confianza. Los desarrolladores reciben más rápido la retroalimentación sobre su código, aumentando el ritmo general de innovación.

  • No existen tantos errores y se evita que estos se envíen a producción. Las pruebas automáticas captan las regresiones muy rápido. Permite que las correcciones se implementen más rápido, reduciendo el tiempo medio de resolución y el tiempo para restaurar el servicio.

  • Desarrollar las versiones es más fácil. Los problemas que ocurren en la integración se solucionan mucho más rápido. Las pruebas automatizadas reducen en gran medida la cantidad de fallas que llegan a la operación.

  • Las pruebas ya no son un gran costo para el equipo, pues la CI permite realizar muchas pruebas en cuestión de segundos.

  • El control de calidad es mucho mejor.

  • Al llegar a la operación menos errores, los usuarios quedan satisfechos y tienen una mejor experiencia.

¿Qué es la Entrega Continua (Continuous Delivery/CD)?

La entrega continua es en realidad una extensión de la Integración Continua, en la cual el proceso de entrega de software se automatiza para permitir implementaciones fáciles y confiables en la producción, en cualquier momento.

Un proceso de Entrega Continua (CD) bien implementado requiere una base de código que se pueda desplegar en cualquier momento. Con la entrega continua, los lanzamientos de nuevos cambios ocurren de manera frecuente y rutinaria. 

Los equipos continúan con las tareas diarias de desarrollo con la confianza de que pueden mandar a producción un lanzamiento de calidad, en cualquier momento que deseen, sin una complicada implementación y sin tener que seguir pasos de manuales ejecutados por un especialista.

Se considera que la entrega continua es atractiva principalmente porque automatiza todos los pasos que van desde la integración del código en el repositorio base, hasta la liberación de cambios totalmente probados y funcionalmente adecuados.

El proceso consiste en una compleja automatización de los procesos de compilación (si es necesaria), pruebas, actualización de servidores de producción y ajuste de código usado en nuevas máquinas. 

En todo momento, se mantiene la autonomía del negocio para decidir qué modificaciones se publican y cuándo deben hacerse.

Requisitos para la Entrega Continua

  • Base sólida de Integración Continua. Su entorno de pruebas debe cubrir una gran cantidad de código base.

  • Se debe tener la misma aplicación de compilación a través de cada etapa del proceso para así poder confiar en las pruebas de las etapas anteriores.

  • Las implementaciones que se requieren deben ser automatizadas. Aunque se activa de forma manual, una vez inicia no necesita de presencia humana.

  • Para que sea eficaz el proceso de entrega automatizado, los desarrolladores deben responsabilizarse de mantenerlo y de solucionar cualquier problema que surja, tanto si se debe a un error en el código como si es un problema con las pruebas o implementaciones automatizadas.

  • Mantener todos los archivos de configuración en el control de versiones ayuda a asegurar que las entregas sean coherentes y repetibles.

Beneficios de la Entrega Continua

  • Se mejora la productividad del equipo de desarrollo al liberarlos de las tareas manuales, pudiendo dedicar más tiempo a mejorar el nivel de servicio y agregar nuevas funcionalidades que generen valor empresarial.

  • Un flujo de trabajo automatizado asegura que las tareas se completen siempre de la misma manera.

  • Como la entrega continua permite realizar con facilidad pruebas más frecuentes y exhaustivas por haberse automatizado todo el proceso, los desarrolladores podrán descubrir y arreglar los errores antes que se conviertan en problemas más graves.

  • Permite entregar actualizaciones con mayor rapidez y frecuencia, aumentando la confianza operativa, los niveles de servicio y el cumplimiento normativo, porque con un proceso de pruebas estandarizado cada vez se completan las tareas eficientemente.

¿Qué es el Despliegue Continuo (Continuous Deployment)?

Esta es una modalidad más avanzada de Entrega Continua en la medida en que los despliegues a producción no pasan por una validación humana sino que están totalmente automatizados.

La única forma de detener nuevos desarrollos en producción es a través de una prueba que falla e identifica los errores. La implementación de Despliegue Continuo es una manera de acelerar la retroalimentación, haciendo más eficiente el trabajo del equipo.

Gracias a este tipo de despliegue, los desarrolladores pueden llegar a ver su trabajo funcionando poco tiempo después de haberlo realizado, pero requiere un mayor esfuerzo en buenas prácticas y procesos automatizados.

Requisitos para el Despliegue Continuo

  • Las pruebas y compilaciones automatizadas son un requisito previo para el despliegue automatizado. Mientras mejor sea la calidad de las pruebas, mejor será la calidad de cada uno de los lanzamientos.

  • Se debe crear un script para el despliegue en cada entorno, para poder ejecutarlo automáticamente.

  • Para cada nuevo despliegue se deben restablecer los entornos a las mismas condiciones. Esto resulta sencillo de implementar gracias a los contenedores, ya sea en la infraestructura local o en la nube.

  • Para automatizar el despliegue en cada entorno, debe existir una clara separación entre la aplicación como tal y los parámetros específicos de los entornos.

  • Se requiere tener gran confianza en el proceso, especialmente en las pruebas automatizadas. Es esencial crear una cultura de pruebas, priorizando remediar la compilación y el proceso antes que lanzar nuevas funcionalidades.

  • Puede parecer arriesgado, porque si un error no se detecta en las pruebas y aparece en la operación, se podría poner en riesgo tiempo, dinero y reputación. Por tanto, es importante ser proactivo en la búsqueda de problemas, en lugar de esperar recibir los informes de errores.

  • Se debe mantener actualizado el proceso de documentación, coordinando la comunicación con otros departamentos como “soporte” o “marketing”.

Beneficios del Despliegue Continuo

  • Todo se activa de forma automática para cada cambio. Los cambios en el código se implementan rápidamente en la operación, al eliminarse gradualmente todos los cuellos de botella de cada etapa.

  • Cada nueva versión tiene menos riesgos, pues a medida que ocurren cambios se identifican los problemas que surgen y se pueden solucionar más fácilmente.

  • El flujo es continuo y de alta calidad. Este es el beneficio más importante para los clientes. Se reduce el costo global al eliminarse el costo de los entornos inactivos.

  • Se minimiza el tiempo necesario para establecer los entornos de desarrollo. Se evitan bloqueos, retrasos y errores al eliminar la intervención humana.

¿Qué necesito para adoptar CI/CD?

Adoptar CI/CD pudiera parecer desalentador al principio, especialmente para los desarrolladores que ya tienen presiones de tiempo y recursos.

Estas son algunas de las mejores prácticas para ayudar a configurar una canalización de CI/CD exitosa.

1. Garantizar la observación de extremo a extremo

  • Para mantener la calidad del código, se necesita visibilidad en toda la canalización de CI/CD. Implantar una aplicación de “observación” de extremo a extremo brinda visibilidad a nivel de código de todas las compilaciones y servicios en un entorno.

  • Esta plataforma debe capturar métricas, registros y hacer seguimiento para revelar el desempeño técnico, así como la experiencia del usuario, para saber cómo las compilaciones están afectando los resultados.

2. Automatizar

  • Una forma de trabajar más eficientemente es identificando y automatizando cada proceso repetitivo en una canalización de CI/CD. Se pueden automatizar procesos repetitivos en todo el proyecto, desde el desarrollo hasta las pruebas y la implementación. Esto reduce el riesgo de error y permite dedicar más tiempo a escribir código y brindar nuevos servicios a la empresa.

3. Adoptar un enfoque impulsado por objetivos de nivel de servicio

  • Si los desarrolladores deben crear software de alta calidad, también deben responsabilizarse de los entornos de preproducción. Los objetivos de nivel de servicio deben integrarse en la canalización de CI/CD y ser parte de los requisitos que debe cumplir toda nueva construcción.

4. Validar la calidad continua

  • Se debe automatizar el proceso de evaluación de la calidad para detectar códigos incorrectos en cada etapa del ciclo de vida. La capacidad de fusionar los resultados de las pruebas, tomar en cuenta los datos de monitoreo y calcular automáticamente un puntaje de calidad para comparar las compilaciones, brinda a los desarrolladores la capacidad de acelerar la entrega y de continuar en nuevas implementaciones, sin sacrificar la calidad del código.

Herramientas para CI/CD

Entre las herramientas que pueden ayudar a implementar CI/CD se encuentran las siguientes:

  • AWS CodePipeline: Es un servicio totalmente administrado de entrega continua que permite automatizar canalizaciones de lanzamiento para obtener actualizaciones de aplicaciones confiables y rápidas.

  • Azure Pipelines: Es un servicio de CI/CD gratuito (hasta 30 horas al mes) en la nube para compilar y probar automáticamente el código para ponerlo finalmente a disposición de los usuarios.

  • Jenkins: Es la herramienta más conocida del mercado para integración continua (CI). Está desarrollada en Java con código abierto y es compatible con variados sistemas de control de versiones.

  • GitLab CI/CD: GitLab CI es un servicio incluido en GitLab para construir y probar el software cada vez que se actualice el repositorio. GitLab también contiene GitLab CD, que se encarga del despliegue continuo, después de completarse la integración con GitLab CI.

  • Travis CI: Es una plataforma gratuita en la nube para repositorios públicos en GitHub y BitBucket. Ofrece muchas opciones automatizadas de integración continua, que eliminan la necesidad de un servidor dedicado, lo que permite realizar pruebas en diferentes entornos.

Contáctenos

Si su organización está interesada en implementar prácticas modernas de DevOps para entregar software más rápido con procesos CI/CD de la mano de expertos, lo invitamos a contactarnos.

También te puede interesar:También te puede interesar: