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. Se realizan pruebas automáticas en cada iteración de la compilación para identificar los problemas de integración con más rapidez, cuando son más fáciles de solucionar, para así evitar problemas en la fusión final para la publicación. En general, la integración continua permite optimizar el proceso de compilación y obtener así un software de mayor calidad y unas planificaciones de entrega más previsibles.
Por definición, DevOps describe un proceso de desarrollo de software y un cambio de cultura de la organización que acelera la entrega de software de alta calidad mediante la automatización y la integración de las tareas de los equipos de desarrollo y operaciones de TI, dos grupos que tradicionalmente operan por separado o en silos.
En la práctica, los mejores procesos y culturas de DevOps no se limitan al desarrollo y las operaciones, e incorporan entradas de todas las partes interesadas de la aplicación (como diseño de plataforma e infraestructura, seguridad, conformidad, gobierno, gestión de riesgos, línea de negocio, usuarios finales y clientes) en el ciclo de vida de desarrollo de software.
En la infraestructura de DevOps, la integración continua es la primera medida del proceso de desarrollo de software, y en ella se incorpora el código al menos una vez al día para evitar que las copias locales se desvíen 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 solucionar.
La integración continua actúa como requisito previo de las etapas de prueba, despliegue y publicación 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.
La entrega continua y el despliegue continuo siguen a la integración continua en el ciclo de DevOps.
La entrega continua (CD) retoma el proceso donde finaliza la integración continua y automatiza la entrega de aplicaciones a los entornos de infraestructura seleccionados. La CD se centra en entregar cualquier cambio validado de la base de código (actualizaciones, correcciones de errores e incluso nuevas características) a los usuarios de la forma más rápida y segura posible. Garantiza la automatización del envío de los cambios del código a los diferentes entornos, como desarrollo, pruebas y producción.
En el despliegue continuo, los cambios de código que se realizan en las aplicaciones se publican automáticamente en el entorno de producción. Esta automatización se basa en 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.
Entre las ventajas de integración continua que más se suelen mencionar, se incluyen:
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 publicar software. Puesto que la integración continua (enlace externo a IBM) y el desarrollo ágil comparten muchas características (por ejemplo, la 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 aplican en DevOps, estas prácticas combinadas permiten garantizar la calidad del software y la flexibilidad del proyecto.
La integración continua requiere que se integre el trabajo con frecuencia, a menudo varias 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 a los cambios para poder escalar y desarrollar las soluciones con el tiempo. En el contexto de la integración continua, el desarrollo de software ágil consiste en entregar iteraciones de software según la prioridad de valor que dé a las características mientras integra de forma continua.
Entre las herramientas de integración continua de código abierto más populares, se incluyen:
Realizar la integración continua con herramientas de código abierto ofrece muchas ventajas, como por ejemplo:
Las herramientas de integración continua de código abierto que debe tener en cuenta para el flujo de trabajo de desarrollo de software incluyen Jenkins, Go, Buildbot y Travis CI. Tiene más información sobre ellas en la sección siguiente.
Un servidor de integración continua es una herramienta de software que centraliza todas las operaciones de integración continua y proporciona una plataforma fiable y estable para poder crear sus proyectos. Puede configurar y ajustar los servidores de CI para crear varios proyectos para distintas plataformas. Los servidores de integración continua modelan y visualizan fácilmente flujos de trabajo complejos (lo que permite la entrega continua) y proporcionan una interfaz intuitiva para crear conductos de entrega continua. Los servidores de integración continua ofrecen las posibilidades siguientes:
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í y comentar en qué características van a trabajar 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 se deben producir estas combinaciones y pruebas supondría mucho tiempo para los desarrolladores. Tendrían que acordar lo siguiente:
Las plataformas de integración continua tienen respuestas predeterminadas a estas preguntas, y la mayoría de ellas permite la configuración.
Normalmente, en las plataformas de CI como Jenkins, se inician las pruebas de integración durante la incorporación. Cuando se incorpora el código nuevo, el sistema de CI ejecuta una serie de pruebas, que pueden incluir pruebas de unidad y pruebas de regresión y, a continuación, se determina si el código se ha integrado correctamente.
O bien, si utiliza un lenguaje compilado, la prueba predeterminada será si el código se compila correctamente. Si no es así, significa que el código nuevo ha roto la compilación. Para lenguajes como Python o JavaScript, debe crear su propia prueba de integración.
De cualquier forma, la mayoría de los sistemas de CI registran los intentos de integración, la tasa de éxito y otras métricas.
La importancia de las pruebas
Las pruebas continuas empiezan cuando se generan una compilación de integración continua y un paquete (también conocido como entidad instalable o entidad empaquetada), y acaban cuando la entidad empaquetada pasa a producción. Cada paso, de principio a fin, implica un conjunto de pruebas.
Como mínimo, cuando solo tiene una etapa de prueba, el 30 por ciento 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. Antes era necesario realizar las pruebas manualmente. Ahora puede utilizar pruebas automatizadas: la clave para que la integración continua sea eficaz.
Como parte de la automatización de las pruebas para la integración continua, el desarrollo basado en pruebas crea código de forma iterativa y prueba los casos de uso uno por uno 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 código nuevo no ha pasado alguna de las pruebas desarrolladas en todas las áreas funcionales de la aplicación. Como práctica recomendada, los desarrolladores ejecutan todas las pruebas o un subconjunto de ellas en sus entornos locales, de modo que se garantiza que los desarrolladores solo confirmen el código fuente al control de versiones una vez que los nuevos cambios de código pasen las pruebas. La experiencia muestra que las pruebas de regresión eficaces pueden evitar sorpresas desagradables más adelante.
Conducto de integración continua
Los conductos de integración continua automatizan las etapas del conducto de un proyecto, tales como compilaciones, pruebas y despliegues de una manera repetible, con una intervención humana mínima. Automatizar el conducto de integración continua es esencial para agilizar el desarrollo, las pruebas y el despliegue de las aplicaciones facilitando controles, puntos de comprobación y velocidad.
Prácticas recomendadas de integración continua
El proceso de integración continua es un componente fundamental de DevOps que le permite unificar sus equipos de desarrollo y operaciones en un repositorio compartido para codificar, probar, desplegar y dar soporte al software. A continuación, se muestran algunas de las mejores prácticas de CI que pueden ayudarle a tener éxito:
Facilite la configuración y la ejecución de compilaciones de software con la herramienta IBM UrbanCode Build, una solución de gestión de compilaciones de clase empresarial que utiliza un sistema basado en plantillas.
DevOps acelera la entrega de software de alta calidad combinando y automatizando el trabajo de los equipos de desarrollo de software y de operaciones de TI.
La entrega continua automatiza la entrega de aplicaciones a entornos de prueba y producción.
Guía práctica sobre el conducto de integración continua/entrega continua (CI/CD).