¿Qué es la integración continua/entrega continua (CI/CD)?

Un equipo de desarrolladores de software debatiendo frente a varias pantallas de computadora

Definición de integración continua/entrega continua (CI/CD)

La integración continua/entrega continua (CI/CD) es un conjunto de prácticas que automatizan y agilizan los ciclos de desarrollo, pruebas y entrega de software.

La CI/CD proporciona a las organizaciones un marco de desarrollo moderno que permite integraciones de código, lanzamientos de software y actualizaciones más rápidas y confiables. Los enfoques de CI/CD parten de un pipeline de automatización, denominado pipeline de CI/CD, que consta de tres procesos clave:

  • Integración continua (IC). CI es una práctica de desarrollo de software en la que los desarrolladores integran regularmente código nuevo en un repositorio central de código fuente a lo largo del ciclo de desarrollo.
  • Entrega continua (CD). Las prácticas de CD automatizan el empaquetado y la entrega de los cambios en el código una vez que han superado las pruebas de integración. Mantiene el código en un estado desplegable y “perenne”, para que los desarrolladores puedan lanzar paquetes de código bajo demanda.
  • Despliegue continuo. Los pipelines de CI/CD maduros también dependen del despliegue continuo, una estrategia de desarrollo que permite a los desarrolladores lanzar automáticamente los cambios de código en el entorno de producción.

 

Pipeline de CI/CD en un bucle infinito

La CI/CD representa una modernización significativa de las prácticas de desarrollo de software, que antes requerían flujos de trabajo manuales y fases rígidas y secuenciales. Los métodos tradicionales resultaban adecuados para proyectos de desarrollo de menor envergadura, proyectos con requisitos estables o proyectos en los que el marco normativo exigía previsibilidad.

Pero las aplicaciones de software actuales se mueven y cambian rápidamente. Existen en entornos basados en la nube y requieren un enfoque de desarrollo que facilite la colaboración sin fricciones, un feedback rápido y la adaptabilidad a los requisitos cambiantes.

Las herramientas de CI/CD proporcionan precisamente eso. Permiten a los desarrolladores crear aplicaciones de software rápidas, ágiles y confiables, lo cual es esencial para satisfacer las necesidades de los clientes y mantener una ventaja competitiva sobre la competencia.

Desarrollo tradicional frente a CI/CD

Las estrategias y herramientas de CI/CD permiten a los desarrolladores alejarse de los engorrosos y, a menudo, tediosos procesos manuales que acompañan al desarrollo tradicional.

El desarrollo tradicional sigue un proceso lineal y secuencial, en el que cada etapa (recopilación de requisitos, diseño, programación, pruebas manuales y despliegue) debe completarse antes de que comience la siguiente, incluso si hay largas brechas entre cada fase.

Cada desarrollador era responsable de integrar manualmente el código en nuevas iteraciones de una aplicación o servicio. Las diferentes piezas de código no siempre funcionaban bien juntas, y los desarrolladores integraban sus cambios en diferentes plazos (a veces en el último minuto), por lo que la integración era un proceso lento y propenso a errores, especialmente para grandes equipos de desarrollo.

Las pruebas de software tampoco eran frecuentes. Los equipos solían implementar grandes actualizaciones por lotes a la vez (a menudo después de la implementación del código), lo que permitía que los errores se filtraran y se acumularan en el código base. Cuando surgieron problemas, los desarrolladores tuvieron dificultades para averiguar qué cambio introdujo el problema.

Como resultado, los equipos se encontraron con tareas de depuración y aseguramiento de calidad más desafiantes, tasas de fallas más altas y lanzamientos de código más lentos; los usuarios vieron más errores y fallas de software; y las empresas perdieron ingresos por ineficiencias de procesos.

La CI/CD automatiza la mayoría de los aspectos de la creación, prueba y lanzamiento de software. Los pipelines automatizados implementan integración continua, pruebas y despliegue a lo largo del ciclo de vida del desarrollo, mejorando la eficiencia y confiabilidad de los pipelines.

Los cambios de código se fusionan de forma continua e incremental en un repositorio compartido, se crean y prueban automáticamente después de cada confirmación y se despliegan rápidamente (a veces varias veces al día). Los pequeños cambios y las frecuentes actualizaciones de código permiten a los desarrolladores detectar problemas antes y revertir los cambios con mayor facilidad.

Con las herramientas de CI/CD, los equipos conocen inmediatamente los resultados de cada confirmación, y todos pueden ver el estado de cada compilación, prueba y despliegue. Estas características ayudan a aumentar la transparencia de los pipelines para los equipos de desarrollo y operaciones y simplifican la colaboración entre equipos.

 

Característica

Desarrollo tradicional

CI/CD
Flujo de pipelineLineal, por fasesContinuo, integrado
Frecuencia de liberaciónTrimestral, anualDiario, semanal
Construir, probar y desplegarManual, iterativoAutomatizado, repetible
PruebasDespués del desarrollo completoAutomatizado, continuo
Detección de erroresCiclo tardío, reversión más difícilReversión temprana y continua, fácil
RetroalimentaciónLento, en los hitosInmediato, continuo
ColaboraciónRoles aislados, traspasos de responsabilidadesResponsabilidad compartida, estado abierto

Explicación de la integración continua

La integración continua es la primera parte de un pipeline de CI/CD. Permite a los equipos de DevOps mejorar continuamente sus aplicaciones de software, recibir feedback constante, detectar y corregir errores antes de que afecten el rendimiento del software y ofrecer software de mayor calidad en cronogramas de entrega más predecibles. 

Los desarrolladores envían cambios de código a una rama compartida o principal de un sistema de control de versiones (Git, por ejemplo) para rastrear los cambios de código a lo largo del tiempo, y el envío activa una herramienta de CI para realizar una “compilación” de la base de código actualizada. El sistema CI toma el nuevo código, lo compila con el código existente y lo empaqueta con todas las dependencias, como archivos de configuración, bibliotecas u otros recursos. Esto constituye “la compilación”.

Las herramientas de prueba ejecutan una batería de pruebas para validar la compilación antes de que se produzca un “artefacto de compilación”, el archivo resultante que se pasa para realizar más pruebas o a un entorno de producción. La siguiente parte del proceso se denomina entrega continua.

Explicación de la entrega continua

La entrega continua (CD) retoma donde la integración continua se detiene, automatizando la entrega de aplicaciones y los cambios validados de la base de código (actualizaciones, arreglos de errores y características) a todos los entornos de infraestructura necesarios para realizar más pruebas.

Las compilaciones de código que superan las pruebas de integración y las etapas de validación se empaquetan y se envían a los repositorios de código, que centralizan y almacenan los paquetes de código en un estado listo para su implementación. Los flujos de trabajo de CD prueban tanto el software como cualquier dependencia, como las interfaces de programación de aplicaciones (API) conectadas para identificar y corregir cualquier error.

El código se valida para garantizar que el software funcione en distintos escenarios y, si supera la validación, el sistema notifica a los equipos de DevOps que la última versión está disponible. Los miembros del equipo tienen la oportunidad de dar su opinión sobre la nueva compilación y hacer sugerencias finales para los cambios.

Aunque la mayoría de los procesos de CD están automatizados, el CD requiere que los equipos aprueben manualmente una compilación antes de exponerla a los usuarios finales en un entorno de producción en vivo. Esta característica permite a los desarrolladores realizar lanzamientos de software con riesgo controlado, mantener las compilaciones listas para su envío y asegurarse de que los errores y las fallas de las pruebas se detecten antes de la producción.

Explicación del despliegue continuo

El despliegue continuo lleva el CD un paso más allá al desplegar automáticamente cada cambio aprobado en producción, sin intervención humana. En este punto, las modificaciones de código han pasado todos los protocolos de prueba necesarios y, por lo tanto, están listas para el proceso de lanzamiento.

Cuando las actualizaciones de código se evalúan, validan y aprueban, los sistemas de despliegue continuo mueven el artefacto de software a un entorno de pruebas de preproducción o a servidores públicos y plataformas de distribución (como almacenes de aplicaciones) donde los usuarios pueden acceder a él.

Las herramientas de despliegue continuo ofrecen varios beneficios para las empresas que buscan escalar aplicaciones y carteras de TI. Sobre todo, aceleran el tiempo de comercialización al minimizar el tiempo de retraso entre la programación y el valor para el cliente.

Los equipos de DevOps a veces complementan los servicios de despliegue continuo con otras herramientas de control de despliegue, como los indicadores de características, que permiten a los desarrolladores activar o desactivar características sin modificar ni volver a desplegar el código fuente. 

El pipeline de CI/CD

El pipeline de CI/CD es un flujo de trabajo automatizado que agiliza el desarrollo de software integrando, probando y desplegando código continuamente. Mueve el código de principio a fin, desde el desarrollo hasta la producción, lo que ayuda a garantizar que las actualizaciones de software se entreguen de forma rápida, segura y confiable.

Flujo de trabajo del pipeline de CI/CD

Un pipeline típico de CI/CD consta de varios procesos y etapas automatizados a lo largo del ciclo de vida de una versión de software, que incluyen:

Abastecimiento

Los desarrolladores envían los cambios a un sistema de control de versiones, incorporando así el proyecto al proceso de desarrollo. La etapa de selección de proveedores también puede implicar el desarrollo de estrategias de diversificación y la realización de controles de calidad iniciales.

Compilación

El sistema compila el código y lo convierte en artefactos listos para su despliegue. También ejecuta comprobaciones (como análisis estáticos, que analizan y depuran código sin ejecutar el programa) para comprobar que el código se compila correctamente y está listo para realizar más pruebas.

Pruebas

Las pruebas automatizadas se ejecutan contra artefactos para verificar que el código funciona correctamente sin regresión. Las pruebas unitarias, por ejemplo, pueden validar componentes o funciones individuales, proporcionando feedback inmediato sobre si el código se comporta según lo esperado.

Almacenamiento temporal

La compilación probada se despliega en un entorno de ensayo de preproducción, que refleja el entorno en vivo, para la validación final. No todos los artefactos pasan por la puesta en escena, pero la puesta en escena sirve como el campo de pruebas final donde la aplicación se valida en condiciones reales antes de lanzarse a los usuarios finales.

Por ejemplo, los desarrolladores pueden ejecutar un despliegue azul-verde, donde las aplicaciones se despliegan en dos entornos de producción paralelos y cada entorno ejecuta una versión diferente de una aplicación.

El entorno “azul” ejecuta la aplicación en vivo, mientras que el entorno “verde” maneja las pruebas y la validación para nuevas versiones de aplicaciones. Cuando se aprueba la nueva versión, el tráfico se enruta al entorno verde, y este se convierte en el entorno en vivo, y el entorno azul permanece inactivo, pero disponible, para manejar reversiones o pruebas de versiones posteriores.

Despliegue

Las compilaciones exitosas se mueven al proceso de despliegue, donde pasan a producción, entregando actualizaciones y nuevas características a los usuarios finales.

Supervisión

Después del despliegue, las herramientas de monitoreo realizan un seguimiento continuo de las aplicaciones de software en su uso real para mantener el rendimiento, la estabilidad y la seguridad del sistema. Las herramientas de monitoreo ayudan a detectar problemas de código para que los equipos de DevOps puedan abordar los problemas rápidamente y optimizar futuras versiones.

CI/CD en DevOps

La CI/CD es una parte fundamental de DevOps, pero solo representa un subconjunto de las prácticas de DevOps.

DevOps es un marco que describe tanto un proceso de desarrollo de software como un cambio cultural hacia la coordinación y colaboración entre el equipo de desarrollo de software y los equipos de operaciones de TI. Tradicionalmente, estos dos grupos actuaban de forma independiente el uno del otro. En la metodología DevOps, trabajan como un equipo colaborativo con un conjunto de herramientas y prácticas compartidas.

Un enfoque DevOps promueve la responsabilidad compartida, la colaboración continua y la optimización de procesos. Además del proceso de entrega de software, su alcance abarca la ingeniería de infraestructura y plataformas, la seguridad, el cumplimiento normativo, la gobernanza y la gestión de riesgos.

Por el contrario, la CI/CD se centra específicamente en crear, probar, desplegar y mejorar aplicaciones de software. La automatización de estos procesos mejora DevOps al ayudar a las organizaciones a mejorar la calidad del código, la cobertura de pruebas, la gestión de dependencias y las métricas de observabilidad y, en última instancia, lanzar software más sólido con mayor frecuencia.

Protección de los pipelines de CI/CD

La protección de CI/CD requiere prácticas, procesos y tecnologías que puedan incorporar medidas de seguridad y cumplimiento en todo el proceso.

En los modelos de desarrollo tradicionales, la seguridad solía incorporarse al software al final del ciclo de desarrollo. Sin embargo, el avance de las plataformas en la nube, las arquitecturas de microservicios y las aplicaciones en contenedores ha transformado (y acelerado) el ciclo de vida del desarrollo de software, dejando obsoletas las estrategias de seguridad tradicionales.

Entra en escena DevSecOps.

DevSecOps, abreviatura de desarrollo, seguridad y operaciones, incorpora arquitectos e ingenieros de ciberseguridad en la estrategia de DevOps para garantizar que cada componente de la aplicación y cada elemento de configuración de la pila se parcheen, protejan y documenten de forma proactiva. Es una práctica de desarrollo que desplaza los protocolos de seguridad de la derecha (final) a la izquierda (comienzo) del pipeline de desarrollo.

Con el desplazamiento a la izquierda, los miembros del equipo implementan protocolos de seguridad (como cifrado de datos, validación de entrada, controles de acceso basados en roles y autenticación multifactor) desde el principio. El desplazamiento a la izquierda permite a los equipos de DevOps identificar y corregir rápidamente las vulnerabilidades de seguridad antes de que los delincuentes cibernéticos puedan explotarlas o interrumpir la funcionalidad del software. 

DevSecOps también incorpora actividades de “desplazamiento a la derecha”, extendiendo las prácticas de seguridad a los entornos de producción posteriores al despliegue. Las prácticas de desplazamiento a la derecha priorizan el monitoreo, las pruebas y la protección de aplicaciones en tiempo de ejecución en condiciones del mundo real. Complementan la seguridad de desplazamiento a la izquierda mediante la creación de un bucle de feedback continuo en el que los problemas de seguridad descubiertos en producción ayudan a informar las fases de desarrollo anteriores.

Utilizada en conjunto, la seguridad de desplazamiento hacia la izquierda y hacia la derecha permite a las empresas integrar controles de seguridad en cada fase del ciclo de vida de una aplicación. Esta estrategia de seguridad dual “desplazamiento en todas partes” ayuda a los equipos de DevOps a implementar tanto la prevención temprana como la detección y respuesta de amenazas tras el despliegue, mejorando la postura de seguridad general y promoviendo la mejora continua.

Tendencias, herramientas y tecnologías de CI/CD

Varias tendencias y tecnologías clave están determinando la forma en que se crean, gestionan y protegen las aplicaciones de software en los pipelines de CI/CD:

Inteligencia artificial (IA) y machine learning

Las soluciones de CI/CD impulsadas por IA pueden ayudar a los desarrolladores a crear aplicaciones más dinámicas, seguras y escalables.

Una organización puede utilizar IA y herramientas de machine learning (ML) para supervisar continuamente el código de software en tiempo real con el fin de identificar riesgos de seguridad y problemas de calidad. Si estas herramientas detectan una anomalía, pueden activar flujos de trabajo automatizados para abordar el problema. Una herramienta de este tipo podría, por ejemplo, reiniciar un servicio fallido o aprovisionar más recursos para adaptarse a un aumento en la demanda de los usuarios.

Y a diferencia de los métodos estáticos de detección de anomalías basados en umbrales, los modelos de IA aprovechan los datos contextuales e históricos para pronosticar posibles fallas en el pipeline antes de que ocurran. Las funciones de pronóstico permiten a los equipos de DevOps adoptar un enfoque proactivo en la gestión de aplicaciones, evitando el tiempo de inactividad y las interrupciones antes de que se produzcan.

Además, los algoritmos de ML pueden ayudar a los equipos a optimizar los procesos de pruebas continuas. Por ejemplo, las organizaciones pueden utilizar herramientas de ML para identificar y corregir pruebas inestables (pruebas que pasan o fallan de forma impredecible) y automatizar la generación de casos de prueba mediante el análisis de los cambios en el código, los defectos anteriores y el comportamiento de los usuarios. Según el informe de IDC, más del 90 % de las empresas está utilizando, probando o ampliando el uso de herramientas de IA y ML en sus prácticas de pruebas de software.

 

Infraestructura como código (IaC)

El aprovisionamiento de infraestructura (que implica la configuración del hardware, la instalación del sistema operativo y la configuración de la red por parte de personal especializado) puede crear cuellos de botella. Los desarrolladores pueden desplegar el código de la aplicación en minutos, pero configurar la infraestructura puede llevar horas o días.

La infraestructura como código (IaC) es “una práctica de DevOps que automatiza el aprovisionamiento y la gestión de la infraestructura de TI mediante el uso de archivos de configuración en lugar de procesos manuales”. Debido a que la IaC trata la infraestructura como software, permite que la infraestructura se mueva a la velocidad del desarrollo de software.

Los equipos pueden usar la IaC para versionar, probar y desplegar la infraestructura aplicando las mismas plantillas y prácticas que usan para el código de la aplicación. De hecho, el código de la infraestructura y la aplicación se puede probar, validar y desplegar en paralelo (en lugar de utilizar procesos dispares).

Los desarrolladores pueden aprovisionar rápidamente entornos de sandbox (entornos seguros y aislados donde los equipos pueden probar y ejecutar código sin afectar las aplicaciones en vivo) y entornos de producción bajo demanda. Los equipos de control de calidad pueden poner en marcha entornos de prueba al instante, con una configuración coherente. Los equipos de operaciones pueden automatizar la infraestructura para las pruebas de aceptación del usuario y de seguridad.

Y cuando el nuevo código pasa las pruebas, tanto la aplicación como su infraestructura se pueden desplegar juntas, lo que da como resultado una entrega de características más rápida y despliegues más frecuentes.

GitOps

GitOps es un marco moderno que ayuda a acelerar la entrega de software mediante la aplicación de prácticas de programación centradas en el desarrollador (como solicitudes de extracción y revisiones de código) a las operaciones de infraestructura y las prácticas de configuración de software.

La IaC es central en GitOps. La IaC define y gestiona la infraestructura a través del código y declara el estado deseado de los sistemas. Estas configuraciones de IaC a menudo se almacenan en plataformas basadas en Git (GitHub, por ejemplo), con un repositorio Git que sirve como única fuente de información para el almacenamiento y el control de versiones. En un pipeline de CI/CD, los agentes automatizados verifican continuamente el repositorio en busca de cambios y aplican las configuraciones a los sistemas en vivo (desplegados).

Por ejemplo, si un equipo de DevOps quiere desplegar un nuevo microservicio, haría los cambios necesarios en los archivos de configuración de Git. Las herramientas de despliegue revisarán y validarán las actualizaciones antes de fusionarlas con la rama de código principal. Luego, los pipelines de CI/CD aplican los cambios a la infraestructura en vivo (un clúster de Kubernetes o un contenedor Docker, por ejemplo) para que el entorno desplegado siempre coincida con las definiciones del repositorio.

GitOps permite a los equipos desplegar actualizaciones de código varias veces al día con el conocimiento de que las herramientas Git detectarán y corregirán rápidamente cualquier discrepancia. Como tal, GitOps puede ayudar a los equipos de DevOps a reducir aún más la intervención manual y minimizar la complejidad de la canalización de CI/CD.

Computación sin servidor

Incluso en un entorno DevOps, muchos desarrolladores de software se sienten abrumados por la diversidad y el volumen de trabajo que les corresponde, sobre todo cuando esto les obliga a realizar tareas manuales y repetitivas. Más de tres cuartas partes de los desarrolladores dedican al menos el 30 % de su tiempo a tareas tan tediosas.

La computación sin servidor es un entorno de desarrollo y un modelo de ejecución que abstrae la gestión de la infraestructura de los desarrolladores. Un proveedor de servicios en la nube aprovisiona y gestiona todos los servidores, los componentes de la infraestructura de backend y los entornos de tiempo de ejecución, para que los desarrolladores puedan centrarse en el código de la aplicación.

Las plataformas sin servidor admiten flujos de trabajo impulsados por eventos, donde las solicitudes de codificación o extracción de código desencadenan compilaciones, pruebas y pasos de despliegue automatizados, para automatizar aún más el pipeline de CI/CD.

Beneficios de CI/CD

Los sistemas de CI/CD ofrecen a las organizaciones una variedad de beneficios, que incluyen:

  • Mejor calidad del software. Los pipelines de CI/CD priorizan las pruebas continuas de código y software para que los errores y vulnerabilidades se detecten al principio de los procesos de desarrollo y los desarrolladores puedan ofrecer código de mayor calidad.
  • Tiempo de comercialización más rápido. La CI/CD permite despliegues de software más rápidos que reducen el tiempo de entrega entre las confirmaciones de código y la entrega de software de semanas a minutos.
  • Menos riesgos y tiempo de inactividad. Las actualizaciones de código pequeñas y frecuentes facilitan la resolución de errores, lo que evita interrupciones a gran escala y reduce el tiempo medio de reparación (MTTR).
  • Mayor transparencia. Los paneles de CI/CD y los ciclos de feedback continuos ayudan a garantizar que los equipos de DevOps tengan acceso a toda la información que necesitan siempre, mejorando la transparencia y la responsabilidad.
  • Mayor productividad. Los pipelines de CI/CD automatizan los pasos manuales repetitivos (por ejemplo, la resolución de problemas de compilaciones y la gestión de scripts de despliegue), para que los desarrolladores puedan centrarse en actualizaciones, nuevas características y nuevas aplicaciones.

Autor

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Soluciones relacionadas
IBM observability

Aproveche el poder de la IA y la automatización para resolver problemas de manera proactiva en toda la pila de aplicaciones.

Explore IBM Instana Observability
Soluciones de DevOps

Utilice el software y las herramientas de DevOps para crear, desplegar y gestionar aplicaciones nativas de la nube en múltiples dispositivos y entornos.

Conozca las soluciones de DevOps
Servicios de consultoría en la nube

Acelere la agilidad y el crecimiento empresarial: modernice continuamente sus aplicaciones en cualquier plataforma con nuestros servicios de consultoría en la nube.

Explore los servicios de consultoría en la nube
Dé el siguiente paso

Desde la detección proactiva de problemas con IBM Instana hasta los insights en tiempo real en toda su pila, puede mantener las aplicaciones nativas de la nube funcionando de forma confiable.

  1. Descubra IBM Instana
  2. Conozca las soluciones de DevOps