Los desarrolladores suelen referirse a la integración continua (CI, por sus siglas en inglés) y a la entrega o implementación continua (CD, por sus siglas en inglés) como CI/CD. Comprender las diferencias entre estas prácticas de DevOps puede ayudarle a reducir el trabajo que supone configurar su propio proceso de CI/CD, lo que le facilitará aprovechar una mayor calidad y estabilidad.
La integración continua y la entrega o implementación continuas son etapas clave en el flujo de trabajo para compilar, probar e implementar software. El objetivo es ofrecer cambios más pequeños y frecuentes a los usuarios, lo que permite una retroalimentación periódica sobre lo que se está compilando. Tanto la integración continua como la implementación continua dependen de la automatización para mejorar la eficacia y la fiabilidad.
Antes de desarrollar su proceso de CI/CD, resulta fundamental comprender las diferencias entre entrega continua, implementación continua e integración continua.
Comencemos por ver las principales características de la integración continua y la implementación continua, junto con sus diferencias.
La integración continua (CI) es la práctica de comprobar de forma automática los cambios en el código para obtener una retroalimentación rápida sobre el trabajo realizado. Con la CI, cada vez que se confirma un cambio, el servidor de CI ejecuta una compilación y ejecuta pruebas automatizadas. Estas pruebas suelen incluir pruebas de unidad, pruebas de integración y otras comprobaciones como análisis lint o estático. Si falla alguna fase del proceso de CI, recibirá comentarios automáticos para que pueda solucionar el problema. El proceso vuelve a empezar cuando se confirma una corrección.
La entrega continua y la implementación continua (CD) continúan donde termina la integración continua. En ambos casos, se implementa un artefacto de compilación en uno o varios entornos de prueba para realizar más pruebas automatizadas, como pruebas de extremo a extremo, de interfaz gráfica de usuario, de rendimiento y de seguridad. Una compilación debe superar todas ellas con éxito antes de considerarse lista para su lanzamiento.
Al igual que con la CI, si una prueba falla durante cualquier fase de la CD, el proceso se detiene y se informa sobre los detalles para que pueda investigar y solucionar el problema. Una vez que una nueva compilación está lista, el proceso comienza de nuevo desde el principio, pasando por todos los pasos de la CI antes de entrar en la fase de CD.
La diferencia entre la entrega continua y la implementación continua radica en la fase final de lanzamiento a producción.
Con la entrega continua, la liberación del artefacto de compilación a producción requiere una intervención manual. El proceso de lanzamiento suele estar totalmente automatizado, pero alguien debe decidir si se lanza una determinada compilación y cuándo. En cambio, con el despliegue continuo, la compilación se lanza automáticamente a producción cada vez que se completan las etapas anteriores del proceso.
Decidir si es más adecuada la entrega continua o la implementación continua depende del contexto.
En el caso de productos de software como aplicaciones móviles o API, lanzar una nueva versión por cada confirmación correcta puede no ser lo ideal. En su lugar, es posible que prefiera publicar de forma programada o esperar hasta que tenga un número mínimo de cambios listos para implementar.
En este caso, puede utilizar la entrega continua para verificar los cambios a medida que los realiza y previsualizar las versiones en un entorno de preproducción. La entrega continua también puede ofrecer la oportunidad de realizar pruebas de aceptación manuales antes de cada lanzamiento.
Por otro lado, la implementación continua funciona correctamente para aplicaciones y servicios basados en web, donde las actualizaciones frecuentes (diarias o incluso cada hora) son la norma.
La implementación continua permite realizar las actualizaciones poco a poco y obtener retroalimentación rápidamente. También puede utilizar la implementación continua para ejecutar experimentos y validar suposiciones con usuarios del mundo real, sabiendo que puede cambiar de dirección rápidamente con una nueva versión de ser necesario.
Por último, cabe señalar que puede integrar algunas pruebas manuales de aceptación y exploratorias en un proceso de implementación continua.
En lugar de exigir comprobaciones manuales antes de cada lanzamiento, puede implementar de forma periódica los cambios en un entorno de ensayo y realizar estas pruebas en un ciclo semanal (o más largo).
Mientras tanto, los cambios que superen todas las comprobaciones automatizadas pueden seguir lanzándose a producción. Si descubre una incidencia en el entorno de ensayo, su proceso automatizado le garantiza la rápida implementación de una solución en la fase de producción.
La CI/CD representa dos etapas en el proceso de compilación, prueba y lanzamiento de software.
Un proceso de CI/CD es una herramienta que aumenta progresivamente su confianza en el código.
Cada etapa satisfactoria aumenta la confianza hasta que usted siente que puede lanzar el código a los usuarios sin problemas. Sin embargo, si falla alguna etapa, se detiene el proceso de compilación y se debe corregir el error o revertir los cambios. Una vez resuelto el problema, el proceso se reinicia desde el principio.
Como primera fase del proceso de compilación, prueba y lanzamiento, la integración continua se centra en la retroalimentación rápida a través de comprobaciones. La información rápida sobre los cambios en el código ayuda a trabajar de forma más eficiente al reducir la necesidad de cambiar de contexto. En lugar de esperar horas o días a los resultados de las pruebas manuales, recibirá alertas en cuestión de minutos sobre cualquier problema generado por sus cambios.
Si la compilación que contiene sus cambios supera las pruebas de CI, es posible su implementación en entornos de preproducción. En este punto, puede realizar pruebas más largas y que consuman más recursos.
Automatizar tantos pasos de CD como sea posible acorta aún más el ciclo de retroalimentación y hace que el flujo de trabajo sea más eficiente. Además de automatizar las pruebas, por ejemplo, puede actualizar los entornos de preproducción e implementar de forma automática las compilaciones en ellos.
Si es la primera vez que utiliza la CI/CD, en lugar de centrarse en elegir entre la integración continua y la entrega o implementación continuas, le sugerimos que decida por dónde quiere empezar y hasta dónde quiere llegar.
Tanto la integración continua como la implementación continua implican varios pasos, lo que significa que puede desarrollar sus procesos de forma gradual.
Si ya ha automatizado algunas partes de su proceso de compilación o lanzamiento, o si ha escrito pruebas automatizadas, estas pueden proporcionarle un punto de partida natural. Si no es así, comience por considerar qué partes de su proceso de compilación, prueba y lanzamiento consumen más tiempo o son más propensas a problemas en producción debido a pruebas inadecuadas.
Muchos equipos optan por comenzar con la integración continua porque requiere menos coordinación con otras partes de la organización, y la retroalimentación rápida de la unidad automatizada y las pruebas de integración ayuda a mejorar la calidad del código.
Además, reconocer el beneficio de la integración continua ayuda a fomentar una cultura de pruebas automatizadas, algo que es vital para la eficacia de la CI/CD y fomenta una mayor expansión de la cobertura de pruebas automatizadas.
Por otro lado, si actualmente gestiona tanto la coordinación de los lanzamientos como el desarrollo del código, automatizar primero la fase final de implementación continua (el lanzamiento a producción) puede ahorrarle tiempo a largo plazo.
Aunque la integración continua proporciona una base sólida para la implementación continua, la elección entre entrega continua e implementación continua depende de sus necesidades. Incluso si su objetivo a largo plazo es la implementación continua, una estrategia típica es comenzar con la entrega continua. Una vez que haya establecido la confianza en sus flujos de trabajo, puede dar el salto a la automatización del lanzamiento final a producción.
La integración continua y la implementación continua funcionan mejor cuando se dividen las tareas de desarrollo en entregas más pequeñas y se confirman los cambios con regularidad.
Si su objetivo es la implementación continua, debe tener en cuenta cómo gestionar las funciones que aún no están listas para su lanzamiento, aunque se hayan confirmado los cambios correspondientes. Para ello, puede utilizar indicadores de funcionalidades o una estrategia de ramificación que aísle el trabajo en curso de la rama de lanzamiento y, al mismo tiempo, garantice la compilación y las pruebas automáticas de cada cambio de código.
Recapitulemos: