¿Qué es la integración continua?
La integración continua es un proceso de desarrollo de software en el que los desarrolladores integran código nuevo en la base de código al menos una vez al día.
Fondo negro y azul
¿Qué es la integración continua?

La integración continua es un proceso de desarrollo de software en el que los desarrolladores integran el código nuevo que han escrito con una mayor frecuencia a lo largo del ciclo de desarrollo, y lo añaden a la base de código al menos una vez al día. Las pruebas automatizadas se realizan en cada iteración de la compilación para identificar los problemas de integración antes, cuando son más fáciles de resolver, lo que también ayuda a evitar problemas en la fusión final para el lanzamiento. En general, la integración continua ayuda a agilizar el proceso de compilación, lo que da como resultado un software de mayor calidad y cronogramas de entrega más previsibles.

Integración continua y DevOps

Por definición, DevOps es un proceso de desarrollo de software  y un cambio de la cultura empresarial que acelera la entrega de software de mayor calidad  mediante la automatización e integración de los esfuerzos de los equipos de  desarrollo y operaciones de TI: dos grupos que tradicionalmente trabajan independiente el uno del otro o en silos.

En la práctica, los mejores procesos y culturas de DevOps se extienden más allá del desarrollo y las operaciones para incorporar datos de todos los stakeholders de la aplicación, incluyendo la ingeniería de la plataforma y la infraestructura, la seguridad, la conformidad, la gestión, la gestión de riesgos, la línea de negocio, los usuarios finales y los clientes, en el ciclo de vida de desarrollo del software. 

En la infraestructura de DevOps, la integración continua se encuentra al principio del proceso de desarrollo de software, donde se verifica el código al menos una vez al día para evitar que las copias locales se alejen demasiado de la rama principal de la compilación de código. De este modo, se evitan conflictos fatales de fusión que podrían "romper" la compilación y que el equipo podría tardar horas o días en resolver.

La integración continua sirve como requisito previo para las etapas de prueba, implementación y lanzamiento de la entrega continua. Todo el equipo de desarrollo sabrá si ha creado algún código incorrecto tan solo unos minutos después de haberlo incorporado, ya que el servicio de integración continua crea y prueba automáticamente los cambios de código en busca de cualquier error.

Diferencias entre integración continua (CI), entrega continua (CD) e implementación continua

La entrega continua y la implementación continua siguen a la integración continua en el ciclo DevOps. 

La entrega continua (CD) retoma el proceso donde finaliza la integración continua, automatizando la entrega de aplicaciones a entornos de infraestructura seleccionados. CD se centra en entregar cualquier cambio validado a la base de código (actualizaciones, correcciones de errores, incluso nuevas funciones) a los usuarios de la manera más rápida y segura posible. Garantiza la automatización de los cambios de código en diferentes entornos, como el desarrollo, las pruebas y la producción.

En laimplementación continua, los cambios de código en una aplicación se publican automáticamente en el entorno de producción. Esta automatización está impulsada por una serie de pruebas predefinidas. Una vez que las nuevas actualizaciones pasan esas pruebas, el sistema envía las actualizaciones directamente a los usuarios del software.

Beneficios de la integración continua

Los beneficios comúnmente citados de la integración continua incluyen:

  • Detección temprana y mejorada de errores, y métricas que le permiten abordar los errores a tiempo, a veces tras solo unos minutos de la incorporación

  • Progreso continuo y demostrado para mejorar la retroalimentación

  • Mejor colaboración en equipo: todos los miembros del equipo pueden cambiar el código, integrar el sistema y determinar rápidamente los conflictos con otras partes del software

  • Integración mejorada del sistema, lo que reduce las sorpresas al final del ciclo de vida del desarrollo de software

  • Menos cambios paralelos para la fusión y prueba

  • Número reducido de errores durante las pruebas del sistema

  • Sistemas actualizados constantemente en los que realizar las pruebas
Integración continua y Agile

Agile es una práctica de desarrollo de software que mejora la forma que tienen los equipos de desarrollo de software de organizarse, adaptarse a los cambios en los requisitos y lanzar software. Debido a que la integración continua (enlace externo a IBM) y el desarrollo de Agile comparten muchas de las mismas características (por ejemplo, automatización de pruebas), resulta útil comentar ambos métodos al mismo tiempo. Agile organiza el desarrollo en grupos más pequeños de trabajo o sprints. Cuando se aplica en DevOps, estas prácticas combinadas ayudan a garantizar la calidad del software y la flexibilidad del proyecto.

La integración continua requiere que se integre el trabajo con frecuencia, a menudo muchas veces al día. La integración se verifica mediante una compilación automatizada que detecta los errores de integración lo antes posible. La compilación debe incluir pruebas de ejecución como parte de la verificación. La evolución natural de la ampliación de las pruebas rápidas a las pruebas de tiempo de ejecución en un entorno de pruebas automatizado es la entrega continua.

Agile (enlace externo a IBM) también es iterativo y se adapta al cambio para que pueda escalar y producir soluciones con el tiempo. En el contexto de la integración continua, el desarrollo de software ágil se basa en la entrega de iteraciones de software basadas en cómo se prioriza el valor de las características a medida que se integra de forma continua.

Herramientas de integración continua de código abierto

Las herramientas populares de integración continua de código abierto incluyen:

  • Jenkins: Jenkins, una herramienta de integración continua de código abierto ampliamente utilizada, permite a los desarrolladores compilar, integrar y probar automáticamente el código tan pronto como lo envíen al repositorio de origen, lo que facilita que los desarrolladores detecten errores temprano e implementen software más rápido. El plug-in de Docker está disponible en Jenkins.

  • Buildbot: Buildbot puede automatizar todos los aspectos del ciclo de desarrollo de software. Como sistema de planificación de trabajos, pone en cola y ejecuta trabajos e informa de los resultados.

  • Go: lo que hace que Go se destaque entre los demás es el concepto de líneas de trabajo, que facilita el modelado de flujos de trabajo de compilación complejos.

  • Travis CI: una de las soluciones alojadas más antiguas y de mayor confianza, también está disponible en una versión local para la empresa.

  • GitLab CI: parte integral del proyecto Rails de código abierto, GitLab CI es un servicio alojado gratuito que proporciona una gestión detallada del repositorio git con funciones como control de acceso, seguimiento de problemas, revisiones de código y más.

La realización de una integración continua con herramientas de código abierto ofrece numerosas ventajas, como por ejemplo:

  • Cientos de plug-ins que pueden dar soporte al proyecto

  • Amplio soporte para lenguajes de código abierto, como Python, Java y JavaScript

  • Es gratuito, proporciona a los estudiantes, startups y desarrolladores una potente herramienta que no pesa en el presupuesto

  • Personalización, lo que permite a los desarrolladores tomar la base de una herramienta de CI y crear en ella para adaptarse a las necesidades

  • La capacidad de modificar y redistribuir las herramientas

Las herramientas de integración continua de código abierto a tener en cuenta para el flujo de trabajo de desarrollo de software incluyen Jenkins, Go, Buildbot y Travis CI, sobre los cuales puede leer en la siguiente sección.

Servidores de integración continua

Un servidor de integración continua es una herramienta de software que centraliza todas sus operaciones de integración continua y proporciona una plataforma fiable y estable para que pueda crear sus proyectos. Puede configurar y ajustar servidores de CI para crear varios proyectos para distintas plataformas. Un servidor de integración continua modela y visualiza fácilmente flujos de trabajo complejos (lo que permite la entrega continua) y proporciona una interfaz intuitiva para crear líneas de trabajo de entrega continua. Los servidores de integración continua ofrecen las posibilidades siguientes:

  • Ejecutar compilaciones, pruebas y lanzamientos automáticos en un solo lugar

  • Implementar cualquier versión, en cualquier momento

  • Mantener un orden de configuración

  • Admitir plug-ins para mejorar la funcionalidad

  • Supervisar el repositorio del proyecto

  • Extraer cambios y realizar tareas que haya definido para que la confirmación sea correcta

  • Enviar comentarios a los miembros del proyecto relevantes con detalles de la compilación
Un caso de uso de integración continua

El siguiente caso de uso hipotético ilustra cómo dos desarrolladores de software pueden utilizar la integración continua para mejorar su proceso de DevOps.

Los dos desarrolladores deben comunicarse entre sí sobre qué características funcionan y cómo. Este pequeño equipo necesita actualizaciones regulares y debe ser capaz de integrar y probar su código como un todo. Planificar la incorporación y las pruebas del código requiere mucho tiempo de desarrollo. Se necesita un sistema automático para la integración continua.

Negociar cuándo sucederían estas combinaciones y pruebas consumiría mucho tiempo para los desarrolladores. Tendrían que ponerse de acuerdo en lo siguiente:

  1. Cuándo empezar a probar la integración de código
  2. Cómo probar que la integración ha sido satisfactoria
  3. Cómo comunicar los resultados al equipo

Las plataformas de integración continua tienen respuestas predeterminadas para estas preguntas y la mayoría permite configuración y ajustes.

Normalmente, en las plataformas de CI como Jenkins, se comienzan las pruebas de integración durante la incorporación. Cuando se verifica el nuevo código, el sistema de CI ejecuta un conjunto de pruebas, que pueden incluir pruebas de unidad y pruebas de regresión y, a continuación, determina si el código se ha integrado satisfactoriamente.

O, si utiliza un lenguaje compilado, la prueba predeterminada será verificar si el código se compila satisfactoriamente. Si no es así, significa que el nuevo código ha roto la compilación. Para lenguajes como Python o JavaScript, debe crear su propia prueba de integración.

De cualquier manera, la mayoría de los sistemas de CI registran los intentos de integración, la tasa de éxito y otras métricas.

Pruebas y mejores prácticas

La importancia de las pruebas

Las pruebas continuas comienzan cuando se produce una compilación de integración continua y un paquete (también conocido como entidad instalable o entidad empaquetada). Se detiene cuando la entidad empaquetada entra en producción. Cada paso, de principio a fin, implica una suite de pruebas.

Como mínimo, cuando sólo tiene una etapa de prueba, el 30 % de la integración continua implica la realización de pruebas. En realidad, las actividades de integración continua se componen de pruebas en un 50-70 por ciento. Solía ser necesario completar las pruebas manualmente. Ahora puede utilizar pruebas automatizadas: la clave para una integración continua satisfactoria.

Como parte de la automatización de pruebas para la integración continua, el desarrollo basado en pruebas crea de forma iterativa código y prueba un caso de uso a la vez para garantizar la cobertura de la prueba, mejorar la calidad del código y establecer las bases para la entrega continua. Las pruebas automatizadas le indican si el nuevo código ha fallado en una o más de las pruebas desarrolladas en todas las áreas funcionales de la aplicación. Una práctica recomendada requiere que los desarrolladores ejecuten todos o un subconjunto de pruebas en sus entornos locales, lo que garantiza que los desarrolladores sólo confirmen el código fuente al control de versiones después de que los nuevos cambios de código pasen sus pruebas. La experiencia muestra que las pruebas de regresión eficaces pueden ayudar a evitar sorpresas desagradables más adelante.

Línea de trabajo de integración continua

Una línea de trabajo de integración continua automatiza las etapas de la línea de trabajo de un proyecto, tales como las compilaciones, pruebas e implementaciones de una manera repetible, con una intervención humana mínima. Una línea de trabajo de integración continua automatizada es esencial para agilizar el desarrollo, las pruebas y la implementación de sus aplicaciones habilitando controles, puntos de control y velocidad.

Mejores prácticas de integración continua

El proceso de integración continua es un componente crítico de DevOps, que le ayuda a unificar sus equipos de desarrollo y operaciones en un repositorio compartido para la codificación, prueba, implementación y soporte de software. Las siguientes son algunas de las mejores prácticas de CI que pueden ayudarle a tener éxito:

  • Mantener un único repositorio de código fuente: utilice la gestión de control de fuente para rastrear y controlar todos los archivos para crear un producto. Esta base de código consolidada facilita la distribución y la visibilidad.

  • Automatizar la compilación: esto implica compilar, enlazar y realizar otros procesos que producen los artefactos de compilación. Las autopruebas también deben automatizarse.

  • Utilizar confirmaciones diarias de la línea principal: obligue a los desarrolladores a enviar sus cambios al flujo de desarrollo principal al menos una vez al día. Cada desarrollador debe verificar que su copia funcional sea consistente con la secuencia de desarrollo principal.

  • Probar en un clon del entorno de producción: haga que el entorno de prueba sea lo más similar posible a su entorno de producción final.

  • Automatizar la implementación: implemente varios entornos (desarrollo, integración, producción) para ejecutar compilaciones y pruebas.
Soluciones relacionadas
IBM UrbanCode Build

Configure y ejecute compilaciones de software más fácilmente con la herramienta IBM UrbanCode Build, una solución de gestión de compilaciones a escala empresarial que utiliza un sistema basado en plantillas.

Explore IBM UrbanCode Build
Recursos ¿Qué es DevOps?

DevOps acelera la entrega de software de mayor calidad combinando y automatizando el trabajo de los equipos de desarrollo de software y de operaciones de TI.

¿Qué es la entrega continua?

La entrega continua automatiza la entrega de aplicaciones a entornos de prueba y producción.

¿Qué es CI/CD y la línea de trabajo de CI/CD?

Una guía práctica para la línea de trabajo de integración continua/entrega continua (CI/CD).

Dé el siguiente paso

¿Está listo para DevOps? La entrega de software y servicios a la velocidad que exige el mercado requiere que los equipos iteren y experimenten rápidamente, y que implementen nuevas versiones con frecuencia, impulsados por los comentarios y los datos recibidos. Los equipos de desarrollo en la nube más exitosos adoptan la cultura y las prácticas modernas de DevOps, adoptan arquitecturas nativas de la nube y ensamblan cadenas de herramientas a partir de las mejores herramientas para disparar su productividad.

Encuentre su solución de DevOps