Entender la implementación continua

La implementación continua (CD) amplía el proceso de integración y entrega continuas (CI/CD) gracias a que implementa de forma automática cada cambio de código realizado con éxito en la producción.

¿Qué es la implementación continua?

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. Cuando un cambio de código supera con éxito todas las fases del proceso, pasa de forma automática a la fase de producción sin intervención manual. 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 los procesos de entrega continua:

  • Los miembros del equipo confirman los cambios en el código en pequeños lotes con regularidad.
  • Cada confirmación inicia un proceso automatizado de prueba y compilación.
  • A continuación, la compilación pasa por varios entornos de preproducción para realizar más pruebas automatizadas.
  • Si no se detectan problemas, la nueva versión del software se pone a disposición de los usuarios.

Una vez implantado un proceso de CI/CD sólido y fiable, puede automatizar el último paso y empezar a implementar los cambios de forma automática. Con la implementación continua, los lanzamientos se convierten en actos rutinarios que suceden varias veces al día.

Dicho lo cual, la implementación continua no debe considerarse el objetivo final de todos los equipos de DevOps. Si está creando aplicaciones, API o software que requiere instalación, es posible que los usuarios no deseen recibir actualizaciones varias veces al día. Es posible que, en este caso, la entrega continua sea más adecuada.

Incluso si no desea un proceso de implementación completamente automatizado, quizás prefiere aplicar algunas de las prácticas a sus propios procesos de CI/CD. Exploremos exactamente qué implica la implementación continua y qué debe tener en cuenta antes de dar el salto hacia «todo» continuo.

Implementación continua vs. entrega continua

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. Con la entrega continua, el paso final a la fase de producción tiene que activarse de forma manual, mientras que con la implementación continua este proceso es automático siempre que todas las fases anteriores se hayan completado con éxito.

Comparación entre la implementación y la entrega continuas

Implementación continua Entrega continua
Modelo de lanzamiento Se activa de forma automática cada vez que un cambio de código completa con éxito una fase del proceso Se inicia de forma manual cada vez que un cambio completa con éxito una fase del proceso
Frecuencia de los lanzamientos Hasta varias veces por hora (en función del tamaño del equipo y de la velocidad del proceso) Normalmente, son semanales o mensuales, pero es posible personalizar la frecuencia
Entornos más adecuados Sitios web y aplicaciones web Aplicaciones móviles, software de escritorio y API. También se pueden utilizar como paso previo a la implementación continua
Proceso de pruebas Debe ser totalmente automatizado y muy robusto. Las barreras de calidad permiten que los desarrolladores y las partes interesadas confíen en que las pruebas identificarán los errores Las pruebas automatizadas deben utilizarse siempre que sea posible. Un proceso de lanzamiento menos frecuente permite la aceptación manual y las pruebas exploratorias
Consideraciones adicionales Las implementaciones de tipo «canary» y las compilaciones en azul/verde pueden minimizar el impacto de cualquier problema que se traslade a la fase de producción. La supervisión es clave para identificar los problemas en la fase producción cuanto antes Aunque los lanzamientos se activen de forma manual, el proceso en sí debe ser automático. También hay que tener en cuenta las opciones de reversión o implementación rápida de correcciones

Obtenga más información acerca de las diferencias con nuestra guía Integración vs. Entrega vs. Implementación continua.

Hacer realidad la implementación continua

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 todo el mundo esté en vilo el día del lanzamiento), puede que las implementaciones por hora le suenen como algo inimaginable.

Sin embargo, la realidad es que muchas organizaciones están adoptando este enfoque más regular. Desde grandes nombres como Netflix, Etsy o Amazon hasta empresas más pequeñas y menos conocidas, muchos negocios están adoptando un sistema de implementación continua para intentar seguir el ritmo del mercado. Este método ha permitido a muchos creadores de software reducir los plazos de publicación de semanas o meses a horas.

Con la creciente presión para lanzar funcionalidades y responder a los comentarios con rapidez, la implementación continua proporciona una estrategia para realizar lanzamientos de forma regular sin comprometer la calidad.

Implantar un sistema de implementación continua

Como extensión de la integración y la entrega continuas, la implementación continua depende de un proceso de compilación, prueba e implementación completamente automatizado. Este enfoque garantiza que la velocidad no vaya en detrimento de la calidad, aunque poner en marcha la implementación continua de forma eficaz requiere algo más que unos cimientos sólidos.

Barreras de calidad

Antes de empezar a publicar cambios sin intervención manual, necesita confiar plenamente en su proceso de CI/CD. En concreto, debe asegurarse de que las compilaciones y las pruebas automatizadas verifican el código de forma eficaz, algo para lo que son muy útiles las barreras de calidad del código.

Las barreras de calidad especifican los criterios para que el código pase a la siguiente fase del proceso. Para algunas fases, puede establecer un umbral simple, como requerir una tasa de superación del 100 % con una cobertura de código del 90 % para las pruebas de unidad. Para otras pruebas automatizadas, podría permitir un porcentaje de advertencias, pero no superar la fase si se produce algún error. A veces, es posible que desee marcar errores o advertencias para revisarlas de forma manual antes de no superar la fase.

El uso de barreras de calidad automatizadas en fases clave del proceso le proporciona control y visibilidad de este, así como un registro completo de auditoría con la diligencia debida realizada en cada lanzamiento.

Tenga en cuenta la estrategia de lanzamiento

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. Desconectar los servidores en cada implementación provocará interrupciones frecuentes de los servicios en línea, por lo que suele ser preferible seguir una estrategia de actualización continua. También puede hacer del despliegue una extensión del proceso de pruebas automatizado con las implementaciones de tipo «canary».

Implementaciones de tipo «canary»

Una implementación de tipo «canary» 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 de los usuarios y de uso, puede comprobar si el nuevo lanzamiento no ha introducido nuevos fallos antes de ponerlo en marcha a más gran escala.

Puntuación de confianza tipo «canary»

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 despliegue automático solo continuará si la puntuación supera el umbral especificado. Si la puntuación es demasiado baja, el análisis métrico proporciona un punto de partida para seguir investigando posibles problemas.

Implementación de compilación en azul/verde

Un proceso de implementación de compilación azul/verde es una técnica habitual para las organizaciones que optan por un sistema de implementación continua. Las implementaciones azules/verdes facilitan la reversión de una versión en caso de que surja un problema, ya que mantienen el código antiguo en línea hasta tener la seguridad de que los cambios funcionan como se esperaba. Si es necesario, puede seguir una implementación inicial tipo «canary» con un lanzamiento azul/verde.

Supervisión de las métricas de producción

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 responder rápidamente a los errores que se hayan podido pasar por alto durante el proceso de pruebas automatizadas.

Comience por identificar las métricas clave que indican la salud del sistema. Estas pueden incluir métricas de salud del sistema, como el espacio en disco o el uso de la CPU, además de métricas de uso, como el número de solicitudes o transacciones. La comparación de estas métricas con una base saludable puede ser una señal de alerta temprana si el sistema no se está comportando como debería. Después, puede decidir si desea revertir el cambio o insertar una corrección en el proceso.

Consideraciones para la implementación continua

Antes de subirse al carro de la implementación continua, tenga en cuenta algunas de las cosas que tendrá que hacer para garantizar que la adopción de esta sea correcta.

Implicar a las partes interesadas

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 sentado las bases con las partes interesadas y no se ha comprometido con ellas para entender lo que necesitan del proceso de publicación, pasar a las publicaciones automatizadas puede hacerles sentir que el desarrollo está fuera de control. Eso puede llevar a las partes interesadas a exigir puntos de control manuales y fases de revisión, lo que ralentizaría el proceso y afectaría a los beneficios de una CI/CD. En el peor de los casos, todo el sistema de implementación continua puede rechazarse y considerarse un experimento fallido.

Fomentar la colaboración

Crear una cultura de colaboración es esencial para que la implementación continua funcione bien. 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 los ciclos de retroalimentación cortos hacen que el ciclo de desarrollo de software resulte más eficiente.

Mantener informado a todo el mundo

Tan importante como fomentar las aportaciones es ofrecer visibilidad acerca de qué se va a lanzar y cuándo. Mantenga a las partes interesadas informadas de forma automática gracias a un servidor de CI. En función de la herramienta de compilación de la implementación continua que elija, podrá difundir información a través de paneles y notificaciones.

Uso de indicadores de funcionalidades o una rama dedicada

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.

Los indicadores de funcionalidades sirven para controlar la visibilidad del código en producción. La ventaja de usarlos es que, dado que el código está activo, puede supervisar el software en busca de fallos inesperados.

Otra opción es utilizar una rama dedicada y un proceso por separado que no pase a producción de forma automática, combinando así la entrega y la implementación continuas según sus necesidades.

Buenas prácticas de implementación continua

Cuando se hace bien, la implementación continua puede ayudar a los equipos a hacer llegar los cambios a los usuarios con mayor frecuencia y minimizar los errores. La clave para ello es seguir las mejores prácticas, entre las que se incluye el uso de métricas para optimizar el proceso y la supervisión del entorno de producción para detectar cualquier problema. También es importante reconocer el cambio cultural que ello implica y conseguir que todo el equipo se sume al proceso de CI/CD.

Puede obtener más información acerca de cómo agilizar su proceso de CI/CD y obtener mejores resultados con nuestra guía de mejores prácticas de implementación continua.

En resumen

  • La implementación continua es una práctica de DevOps que automatiza todas las fases del proceso de compilación, prueba y lanzamiento.
  • El objetivo de la implementación continua es ofrecer funcionalidades a los usuarios con mayor rapidez y frecuencia, sin comprometer la calidad.
  • La implementación continua es especialmente adecuada para sitios y aplicaciones web, ya que los usuarios no tienen que llevar a cabo las actualizaciones por sí mismos.
  • Las versiones más rápidas y frecuentes permiten que la retroalimentación de los usuarios sea más rápida y reducen el impacto de cualquier error que consiga colarse en la fase de producción.
  • Las pruebas automatizadas, la supervisió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.

Cómo puede ayudarle TeamCity

TeamCity facilita el proceso de configuración de la implementación continua, ya que permite personalizar las opciones de los desencadenantes y los ejecutores de compilaciones de la implementación. La configuración de la compilación de la implementación le permite restringir los permisos para implementar en producción, mientras que los desencadenantes de compilación flexibles le permiten definir las condiciones para el lanzamiento. Utilice la compatibilidad integrada de TeamCity con repositorios de paquetes y registros de contenedores para gestionar los artefactos de compilación como parte del proceso de integración continua.

Mantenga a las partes interesadas informadas del progreso dándoles acceso a los intuitivos paneles web de TeamCity. Un control de acceso potente basado en roles garantiza la seguridad del proceso de puesta en producción, mientras que los registros de auditoría integrados proporcionan un registro completo de toda la actividad en sus procesos.

Interfaz de usuario de TeamCity