La implementación continua lleva a su extremo lógico la práctica de DevOps de automatizar los pasos de compilación, pruebas e implementación. Si un cambio en el código pasa correctamente por todas las etapas previas del proceso, ese cambio se implementa automáticamente en la producción sin intervención manual alguna. Adoptar la implementación continua significa que puede hacer llegar las funcionalidades a los usuarios del modo más rápido posible sin poner en entredicho la calidad.
La implementación continua se apoya en una integración continua demostrada y madura, así como en las etapas de entrega continua. Los pequeños cambios en el código se confirman con regularidad para pasar a master, pasan por un proceso de compilación y prueba automatizado con avance a través de varios entornos de preproducción y, si no se detecta ninguna incidencia, por último se lanzan al usuario. Crear un proceso de implementación automatizado que sea estable y fiable significa que un lanzamiento pueden convertirse en algo rutinario que sucede varias veces al día.
Aunque automatizar el lanzamiento final al usuario no es adecuado en todos los proyectos de software, pueden resultarle útiles algunos de los elementos individuales que forman parte de una implementación continua eficaz. Este artículo tratará qué implica y qué hay que tener en cuenta antes de dar este último paso hacia el despliegue de compilaciones y el "todo continuo".
Si sus procesos de integración e implementación son completamente manuales, con bloqueos de código, una estrategia de pruebas en la que tengan que participar todas las partes, y toda la empresa en vilo el día del lanzamiento, puede que las implementaciones rutinarias le suenen inimaginables.
Pero lo cierto es que gran cantidad de organizaciones están adoptando este enfoque, desde grandes nombres como Netflix, Etsy y Amazon a empresas más pequeñas que tratan de seguir el ritmo del mercado. Adoptar un sistema de implementación continua les ha permitido abreviar su plazo de lanzamiento de semanas o incluso meses a horas. Para un número cada vez mayor de ramas del sector, poder lanzar funcionalidades rápidamente y responder con agilidad al feedback se están convirtiendo en algo esencial.
Como extensión de la integración y la entrega continuas, la implementación continua depende de un proceso de pruebas y despliegue de compilación completamente automatizado, para asegurarse de que la velocidad no acaba perjudicando a la calidad. Pero poner en marcha la implementación continua de forma eficaz requiere algo más que unos cimientos sólidos.
Al planear cómo implantar un sistema de implementación continua, una de las cuestiones clave que hay que tener en cuenta es cómo se lanzarán los cambios. Además de escoger una actualización que pueda ejecutarse en lugar de utilizar servidores offline para evitar las frecuentes interrupciones de los servicios online, también puede convertir el lanzamiento en una extensión de su proceso de pruebas automatizado.
Una implementación tipo "canary deployment" limita el despliegue del código actualizado a un pequeño porcentaje de usuarios, que se convierten en probadores involuntarios en producción. Al supervisar las métricas de comportamiento y uso, puede comprobar que el nuevo lanzamiento no ha introducido nuevos fallos antes de ponerlo en marcha a más gran escala.
Algunas empresas han llevado la automatización un paso más allá con una puntuación de confianza tipo canary, que compara automáticamente todo un conjunto de métricas frente a unos datos base. El lanzamiento continua automáticamente solo si la puntuación supera el umbral especificado, mientras que el análisis de las métricas ofrece un punto de partida para una posterior investigación de potenciales incidencias.
Un proceso de implementación de compilación azul/verde es una técnica habitual para organizaciones que utilizan un sistema de implementación continua, puesto que facilita la reversión de un lanzamiento en caso de un problema, manteniendo el código online hasta que esté seguro de que los cambios funcionan como esperaba. Si es necesario, puede seguir una implementación inicial tipo canary con un lanzamiento azul/verde.
Tanto si usa una implementación azul/verde como si pone en marcha reemplazos directos, supervisar el estado del sistema de producción es esencial si desea poder responder rápidamente a cualquier error que se haya colado durante el proceso de lanzamiento.
Tener a la vista ciertas métricas que indican el estado de su sistema, desde el espacio en disco y el uso de la CPU a los números de solicitudes o transacciones, y compararlas con un valor base, puede advertirle de forma anticipada si algo no está funcionando como debiera. Puede decidir si desea revertir el cambio o seguir adelante insertando una corrección en el proceso.
Antes de subirse al tren de la implementación continua, vale la pena tomarse un momento para pensar en ciertos problemas que suelen surgir al adoptarla.
El ciclo de desarrollo de software implica algo más que solo cambios en el código. Los equipos de investigación de usuarios, marketing de producto, diseño de interacciones, documentación, comercial, legal y de asistencia también desempeñan un papel aquí.
Si no ha allanado el terreno con los grupos interesados ni ha hablado con ellos para saber qué necesitan del proceso del lanzamiento, pasar a una implementación continua puede hacerles sentir que el desarrollo está fuera de control. Esto puede dar lugar a la introducción de puntos de comprobación y etapas de revisión manuales que ralentizarán el proceso, o incluso se rechazará el sistema de implementación continua como si de un experimento fallido se tratase.
Crear una cultura de colaboración es esencial. Implicar a otros equipos en el proceso de producción para que sus ideas (acerca del diseño, problemas de seguridad, terminología o cumplimiento) puedan incorporarse desde el principio es solo un ejemplo de cómo pequeños bucles en el feedback hacen que el ciclo de desarrollo de software resulte más eficiente. Tan importante como fomentar las aportaciones es ofrecer visibilidad acerca de qué se va a lanzar y cuándo. Se puede mantener informados a los grupos interesados de forma automática con la ayuda de un servidor de implementación continua, una herramienta de implementación de compilación continua que distribuya información a través de paneles y notificaciones.
A veces, solo la visibilidad de lo que está por llegar no es suficiente. Cuando trabaja en una funcionalidad mayor o necesita controlar el calendario de un lanzamiento, limitarse a implementar cada confirmación una vez que pase todas las pruebas puede no ser lo ideal.
Las feature flags son una opción para controlar la visibilidad del código durante la producción, cuya ventaja es que el código está en funcionamiento, de modo que puede monitorizarlo por si ocurren fallos inesperados. Otra opción es utilizar una rama dedicada implementada en un proceso por separado que no pase automáticamente a producción, combinando así la entrega continua y la implementación continua según sus necesidades.
Si se efectúa correctamente, la implementación continua puede ayudar a los equipos a automatizar la implementación de software a los usuarios. Emplear unas buenas prácticas de implementación continua puede ayudarle a agilizar el proceso y obtener mejores resultados. Por ejemplo, es importante supervisar y medir su proceso con regularidad para detectar indicios de problemas. También tiene sentido implicar a todo el equipo para crear un proceso de CI/CD eficaz.
Es fácil confundir ambas, pero la implementación continua y la entrega continua son partes distintas del lado de CD del proceso de CI/CD. While continuous delivery is focused on automating the steps required to deliver the software to users (for example, by automating builds, test automation, etc.), continuous deployment is a logical continuation of the process, automating the release of the software to end users provided that all necessary criteria are met.
La implementación continua utiliza la automatización al máximo para hacer llegar las funcionalidades rápidamente a los usuarios sin poner en entredicho la calidad. Para esta práctica de DevOps es fundamental un feedback habitual y rápido. Las pruebas automatizadas, la monitorización de la producción, la colaboración con otras funciones y el comportamiento de los usuarios ofrecen información acerca del proceso de desarrollo de software. Trabajando en fragmentos más pequeños y lanzando con frecuencia puede seguir efectuando ajustes a partir del feedback, y mejorar continuamente su producto.