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

Un equipo de desarrolladores de software conversando frente a varias pantallas de ordenador

Qué es la 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, versiones de software y actualizaciones más rápidas y fiables. La CI/CD se basa en un proceso de automatización (denominado pipeline de CI/CD) que consta de tres procesos clave:

  • Integración continua (CI). La CI es una práctica de desarrollo de software en la que los desarrolladores integran periódicamente código nuevo en un repositorio central de código fuente a lo largo de todo el ciclo de desarrollo.
  • Entrega continua (CD). Las prácticas de CD automatizan el empaquetado y la entrega de los cambios de código una vez estos han superado las pruebas de integración. Garantiza que el código esté siempre listo para su implementación, de modo que los desarrolladores puedan lanzar paquetes de código bajo demanda.
  • Implementación continua. Los pipelines de CI/CD maduros también se basan en la implementación continua, una estrategia de desarrollo que permite a los desarrolladores publicar 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.

Sin embargo, las aplicaciones de software actuales evolucionan y cambian con rapidez. Se desarrollan en entornos basados en la nube y requieren un enfoque de desarrollo que facilite una colaboración fluida, un feedback rápido y la capacidad de adaptarse a los requisitos cambiantes.

Las herramientas de CI/CD proporcionan precisamente eso. Permiten a los desarrolladores crear aplicaciones de software rápidas, ágiles y fiables, lo que resulta esencial para satisfacer las necesidades de los clientes y mantener una ventaja competitiva frente a los competidores.

Desarrollo tradicional versus 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, codificación, pruebas manuales e implementación) debe completarse antes de que comience la siguiente, aunque haya largos intervalos entre cada fase.

Cada desarrollador era responsable de integrar manualmente el código en las nuevas iteraciones de una aplicación o servicio. Las diferentes piezas de código no siempre funcionaban bien juntas, y los desarrolladores integraban los 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 equipos de desarrollo grandes.

Las pruebas de software tampoco se realizaban con frecuencia. Por lo general, los equipos aplicaban grandes actualizaciones por lotes de una sola vez (a menudo tras la implementación del código), lo que permitía que los errores pasaran desapercibidos y se acumularan en el código. Cuando surgían problemas, los desarrolladores tenían dificultades para determinar qué cambio los había provocado.

Como consecuencia, los equipos se enfrentaban a tareas de depuración y control de calidad más complejas, a mayores índices de fallos y a lanzamientos de código más lentos; los usuarios experimentaban más errores y fallos en el software; y las empresas perdían ingresos debido a la ineficiencia de los procesos.

La CI/CD automatiza la mayoría de los aspectos de la creación, prueba y lanzamiento de software. Los pipelines automatizados implementan la integración, las pruebas y la implementación continuas a lo largo del ciclo de vida del desarrollo, mejorando la eficiencia y la fiabilidad 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 implementan rápidamente (a veces varias veces al día). Los pequeños cambios y las frecuentes incorporaciones de código permiten a los desarrolladores detectar los 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 e implementación. 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 del pipelineLineal, por fasesContinuo, integrado
Frecuencia de lanzamientoTrimestral, anualDiaria, semanal
Compilación, pruebas, implementaciónManual, iterativoAutomatizado, repetible
PruebasTras el desarrollo completoAutomatizadas, continuas
Detección de erroresEn fases avanzadas del ciclo, reversión más difícilTemprana y continua, reversión sencilla
ComentariosLento, en hitosInmediato, continuo
ColaboraciónFunciones aisladas, traspasos de responsabilidadesResponsabilidad compartida, estado abierto

Qué es 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 las aplicaciones de software, recibir feedback de forma constante, detectar y corregir errores antes de que afecten al rendimiento del software y ofrecer software de mayor calidad con plazos de entrega más predecibles. 

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

Las herramientas de pruebas ejecutan una serie de pruebas para validar la compilación antes de que se genere un “artefacto de compilación” (el archivo resultante que se envía para realizar pruebas adicionales o a un entorno de producción). A la siguiente parte del pipeline se la denomina entrega continua.

Qué es la entrega continua

La entrega continua (CD) continúa donde termina la Integración continua, automatizando la entrega de aplicaciones y de los cambios validados en la base de código (actualizaciones, correcciones de errores e incluso nuevas características) a todos los entornos de infraestructura necesarios para realizar pruebas adicionales.

Las compilaciones de código que superan las pruebas de integración y las etapas de validación se empaquetan y entregan a los repositorios de código, que centralizan y almacenan los paquetes de código en un estado implementable. 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 ayudar a garantizar que el software funciona en todos los escenarios y, si supera la validación, el sistema notifica a los equipos de DevOps que la última compilación está disponible. Los miembros del equipo tienen la oportunidad de aportar feedback sobre la nueva compilación y realizar cualquier sugerencia final de modificación.

Aunque la mayoría de los procesos de CD están automatizados, la CD exige 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 control de riesgos, mantener las compilaciones listas para su distribución y asegurarse de que los errores y los fallos en las pruebas se detecten antes de la puesta en producción.

Qué es la implementación continua

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

Una vez que las actualizaciones del código se han probado, validado y aprobado, los sistemas de implementación continua trasladan el artefacto de software a un entorno de prueba previo a la producción o a servidores públicos y plataformas de distribución (como las tiendas de aplicaciones), donde los usuarios pueden acceder a él.

Las herramientas de implementación continua ofrecen varios beneficios para las empresas que buscan escalar sus aplicaciones y portfolios de TI. Sobre todo, aceleran el tiempo de comercialización al reducir al mínimo el lapso de tiempo que transcurre entre la codificación y la generación de valor para el cliente.

Los equipos de DevOps suelen complementar los servicios de implementación continua con otras herramientas de control de la implementación, como los indicadores de características, que permiten a los desarrolladores activar o desactivar características sin necesidad de modificar ni volver a implementar el código fuente. 

El pipeline de IC/EC

El pipeline de CI/CD es un flujo de trabajo automatizado que optimiza el desarrollo de software mediante la integración, las pruebas y la implementación continuas del código. Gestiona el código de principio a fin (desde el desarrollo hasta la producción) y contribuye a garantizar que las actualizaciones de software se entreguen de forma rápida, segura y fiable.

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, entre los que se incluyen:

Abastecimiento

Los desarrolladores incorporan los cambios a un sistema de control de versiones, lo que introduce el proyecto en el pipeline. La fase de sourcing también puede implicar el desarrollo de estrategias de ramificación y la ejecución de controles de calidad iniciales.

Edificio

El sistema compila el código y lo convierte en artefactos implementables. 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 sobre los artefactos para verificar que el código funcione correctamente sin regresión. Las pruebas unitarias, por ejemplo, pueden validar componentes individuales o funciones, proporcionando feedback inmediato sobre si el código se comporta como está previsto.

Organización de versiones

La versión probada se implementa en un entorno de prueba de preproducción (que reproduce el entorno de producción) para su validación final. No todos los artefactos pasan por el entorno de prueba, pero este sirve como campo de pruebas definitivo en el que se valida la aplicación en condiciones reales antes de su lanzamiento a los usuarios finales.

Por ejemplo, los desarrolladores pueden llevar a cabo una implementación azul-verde, en la que las aplicaciones se implementan en dos entornos de producción paralelos y cada uno de ellos ejecuta una versión diferente de la aplicación.

El entorno “azul” ejecuta la aplicación activa, mientras que el entorno “verde” se encarga de las pruebas y la validación de las nuevas versiones de la aplicación. Cuando la nueva versión supera las pruebas, el tráfico se redirige al entorno verde, que pasa a ser el entorno de producción, mientras que el entorno azul permanece inactivo (aunque disponible) para gestionar reversiones o pruebas de versiones posteriores.

Implementación

Las compilaciones que superan las pruebas pasan al proceso de implementación, donde se incorporan a la producción, proporcionando actualizaciones y nuevas características a los usuarios finales.

Supervisión

Tras la implementación, las herramientas de monitorización 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 monitorización ayudan a detectar problemas de código para que los equipos de DevOps puedan abordarlos con prontitud 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 operaban de forma independiente entre sí. En la metodología DevOps, trabajan como un equipo colaborativo con un conjunto de herramientas y prácticas compartidas.

El enfoque DevOps fomenta la responsabilidad compartida, la colaboración continua y la optimización de los procesos. Además del pipeline de entrega de software, su ámbito abarca la infraestructura y la ingeniería de plataformas, la seguridad, el cumplimiento, el gobierno y la gestión de riesgos.

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

Protección de pipelines de CI/CD

La seguridad 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 a menudo se añadía al software al final del ciclo de desarrollo. Pero el avance de las plataformas en la nube, las arquitecturas de microservicios y las aplicaciones contenerizadas ha cambiado (y acelerado) el ciclo de vida del desarrollo de software, dejando obsoletas las estrategias de seguridad tradicionales.

Aquí entra en juego 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 actualice, proteja y documente de forma proactiva. Se trata de una práctica de desarrollo que desplaza los protocolos de seguridad de la derecha (el final) a la izquierda (el principio) del pipeline de desarrollo.

Con el desplazamiento a la izquierda, los miembros del equipo implementan protocolos de seguridad (como el cifrado de datos, la validación de entradas, los controles de acceso basados en roles y la 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 ciberdelincuentes puedan explotarlas o afectar al funcionamiento 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 a la implementación. Las prácticas de desplazamiento a la derecha priorizan la monitorización, las pruebas y la protección de las aplicaciones en tiempo de ejecución en condiciones reales. Complementan la seguridad del desplazamiento a la izquierda creando un bucle de feedback continuo en el que los problemas de seguridad descubiertos en producción sirven para orientar las fases iniciales del desarrollo.

Cuando se combinan, los enfoques de seguridad de desplazamiento a la izquierda y a la derecha permiten a las empresas integrar controles de seguridad en todas las fases del ciclo de vida de una aplicación. Esta doble estrategia de seguridad desplazamiento en todas las fases ayuda a los equipos de DevOps a implementar tanto la prevención temprana como la detección y respuesta a amenazas posteriores a la implementación, mejorando la posición de seguridad general e impulsando la mejora continua.

Tendencias, herramientas y tecnologías de CI/CD

Varias tendencias y tecnologías clave están moldeando cómo se crean, gestionan y protegen las aplicaciones de software en los pipelines de CI/CD:

Inteligencia artificial (IA) y machine learning (ML)

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

Una organización puede utilizar herramientas de ML e IA para monitorizar 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 solucionar el problema. Una herramienta de este tipo podría, por ejemplo, reiniciar un servicio que haya fallado o asignar más recursos para dar respuesta a un aumento de 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 realizar previsiones de posibles fallos en los pipelines antes de que se produzcan. Las características de previsión permiten a los equipos de DevOps adoptar un enfoque proactivo para la gestión de aplicaciones, evitando el tiempo de inactividad y las interrupciones antes de que se produzcan.

Además, los algoritmos de ML ayudan 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 aprueban o fallan de forma impredecible) y automatizar la generación de casos de prueba mediante el análisis de cambios en el código, los defectos anteriores y el comportamientos de los usuarios. Según IDC, más del 90 % de las empresas utilizan, prueban o amplían el uso de herramientas de IA y ML en sus prácticas de pruebas de software.

 

Infraestructura como código (IaC)

La puesta a punto de la infraestructura (que implica la instalación del hardware, la instalación del SO y la configuración de la red por parte de personal especializado) puede generar cuellos de botella. Los desarrolladores pueden implementar el código de una aplicación en cuestión de minutos, pero la configuración de 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”. Dado que la IaC trata la infraestructura como si fuera software, permite que esta evolucione al mismo ritmo que el desarrollo de software.

Los equipos pueden utilizar la IaC para gestionar las versiones, probar e implementar la infraestructura aplicando las mismas plantillas y prácticas que utilizan para el código de las aplicaciones. De hecho, la infraestructura y el código de las aplicaciones pueden probarse, validarse e implementarse en paralelo (en lugar de utilizar procesos dispares).

Los desarrolladores pueden crear rápidamente entornos aislados (entornos seguros e independientes en los que los equipos pueden probar y ejecutar código sin afectar a las aplicaciones en producción) 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 uniforme. Los equipos de operaciones pueden automatizar la infraestructura para las pruebas de aceptación por parte de los usuarios y las pruebas de seguridad.

Y cuando el nuevo código supera las pruebas, tanto la aplicación como su infraestructura pueden implementarse conjuntamente, lo que se traduce en una entrega más rápida de las características y en implementaciones más frecuentes.

GitOps

GitOps es un marco operativo moderno que ayuda a acelerar la entrega de software mediante la aplicación de prácticas de codificació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 un elemento fundamental de 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 suelen almacenarse en plataformas basadas en Git (por ejemplo, GitHub), con un repositorio Git que sirve como única fuente fiable para el almacenamiento y el control de versiones. En un pipeline de CI/CD, los agentes automatizados comprueban continuamente el repositorio en busca de cambios y aplican las configuraciones a los sistemas activos (implementados).

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

GitOps permite a los equipos implementar actualizaciones de código varias veces al día, con la seguridad de que las herramientas de Git detectarán y corregirán rápidamente cualquier discrepancia. De este modo, GitOps puede ayudar a los equipos de DevOps a reducir aún más la intervención manual y a minimizar la complejidad de los pipelines de CI/CD.

Computación sin servidor

Incluso en un entorno DevOps, muchos desarrolladores de software se ven desbordados por la diversidad y el volumen de trabajo que les corresponde, especialmente 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 este tipo de tareas tediosas.

La computación sin servidor es un entorno de desarrollo y un modelo de ejecución que libera a los desarrolladores de la gestión de la infraestructura. Un proveedor de servicios en la nube se encarga de aprovisionar y gestionar todos los servidores, los componentes de la infraestructura de backend y los entornos de tiempo de ejecución, de modo que los desarrolladores puedan centrarse en el código de la aplicación.

Las plataformas sin servidor admiten flujos de trabajo basados en eventos (en los que las confirmaciones de código o las solicitudes de incorporación de cambios activan procesos automatizados de compilación, pruebas e implementación) 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 serie de beneficios, entre los que se incluyen:

  • Mejor calidad del software. Los pipelines de CI/CD priorizan las pruebas continuas de código y software para que los errores y las vulnerabilidades se detecten en una fase temprana 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 implementaciones de software más rápidas que reducen el tiempo de espera entre las confirmaciones de código y la entrega del software de semanas a minutos.
  • Menos riesgo y tiempo de inactividad. Las pequeñas y frecuentes actualizaciones de código facilitan la resolución de fallos y errores, lo que evita interrupciones a gran escala y reduce el tiempo medio de reparación (MTTR).
  • Mayor transparencia. Los paneles de control de CI/CD y los bucles de feedback continuo ayudan a garantizar que los equipos de DevOps tengan acceso a toda la información que necesitan en todo momento, mejorando la transparencia y la responsabilidad.
  • Mayor productividad. Los pipelines de CI/CD automatizan los pasos repetitivos y manuales (como la resolución de problemas en las compilaciones y la gestión de los scripts de implementación, por ejemplo), de modo que los desarrolladores puedan centrarse en las actualizaciones, las nuevas características y las nuevas aplicaciones.

Autor

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Soluciones relacionadas
IBM Instana Observability

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

Explore IBM Instana Observability
Soluciones DevOps

Utilice el software y las herramientas de DevOps para construir, implementar y gestionar aplicaciones nativas de la nube en varios dispositivos y entornos.

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

Acelere la agilidad y el crecimiento empresarial: modernice continuamente sus aplicaciones en cualquier plataforma utilizando 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 conocimientos en tiempo real en toda su pila, puede mantener las aplicaciones nativas de la nube funcionando de forma fiable.

  1. Descubra IBM Instana
  2. Explore las soluciones DevOps