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.
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.
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.
Los beneficios comúnmente citados de la integración continua 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 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.
Las herramientas populares de integración continua de código abierto incluyen:
La realización de una integración continua con herramientas de código abierto ofrece numerosas ventajas, como por ejemplo:
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.
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:
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:
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.
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:
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.
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.
La entrega continua automatiza la entrega de aplicaciones a entornos de prueba y producción.
Una guía práctica para la línea de trabajo de integración continua/entrega continua (CI/CD).