Pasar al contenido principal

Integración continua y Entrega continua (CI/CD)

Imagen Blog Integración continua y Entrega continua

En esta nueva entrada les presentamos una introducción a las prácticas de Entrega Continua (Continuous Delivery, abreviado CD) y de Integración Continua (Continuous Integration - abreviado CI), elementos importantes en el repertorio de prácticas de desarrollo de software moderno y DevOps.

¿Cuándo debo considerar CI/CD?

Cada vez son más las organizaciones que se benefician al adoptar la integración continua y la entrega continua, conocidas como CI/CD, como un elemento clave para darle agilidad, velocidad y mayor calidad al software que transforma las empresas.

Adoptamos CI/CD para entregar software más rápido, más frecuentemente y con menos errores.

Algunas de las principales ventajas de adoptar las prácticas de CI/CD incluyen las siguientes:

  • Entregar o liberar código de forma inmediata, sin esperar a acumular muchas funcionalidades, tickets o desarrollos independientes.

  • Menor esfuerzo y más confianza al momento de desplegar código a la etapa de producción.

  • Se facilita el trabajo en equipo y la comunicación entre los desarrolladores de software.

  • Mayor visibilidad del código que se está desarrollando.

  • Se pueden identificar errores antes de publicar el código.

En algunos casos es posible que los miembros más antiguos del equipo de trabajo se resistan a la adopción de CI/CD en el flujo de trabajo, pues la necesidad de reorganizar algunos roles, de utilizar nuevas herramientas y de poner al descubierto debilidades técnicas llevan a que se perciba el cambio como una amenaza.

Por esta razón es fundamental definir desde el inicio del proyecto la forma en que la metodología CI/CD puede beneficiar al equipo, teniendo claridad respecto a cuales serán las acciones, responsabilidades y funciones de cada un de los integrantes del mismo.

A través de la metodología CI/CD el equipo tiene completo control del proceso de desarrollo y producción, probando e integrando cambios para verificar que todo funcione correctamente. De esta forma es posible identificar fácilmente cualquier error que impida su funcionamiento correcto.

¿Cuánto esfuerzo requiere desplegar código?

El nivel de esfuerzo requiere integrar y desplegar código pone en evidencia el nivel de madurez de los procesos técnicos de integración continua y entrega continua (CI/CD).

En nuestro trabajo de consultoría encontramos hábitos que surgen de las limitantes en los procesos existentes. Hacer una sola integración de código al final del proceso de desarrollo, acumular código para desplegar cada semana o cada quince días o en general una tasa alta de fallas en los despliegues son un indicador importante de una oportunidad de mejora.

La Integración Continua (CI) es una práctica que incrementa la eficacia y la eficiencia de los resultados del equipo de desarrolladores de software. Se trata de  combinar, de forma periódica y en un repositorio central, los cambios realizados en el código de un proyecto, para luego ejecutar pruebas, detectar y reparar errores lo antes posible.

Esta metodología permite mejorar la calidad del código, entregar avances al cliente más frecuentemente  y trabajar ágilmente con nuevos participantes del equipo de desarrollo, incluso si estos no conocen en profundidad el proyecto completo.

    “Detectar problemas de código es mucho más fácil con CI, evitando que estos errores lleguen a los clientes”.

Brecha de conocimiento

Muchas organizaciones que buscan implementar estas metodologías fracasan en el proceso por no tener personas dentro del equipo con los conocimientos necesarios para el diseño de la solución CI/CD adecuada.

Implementar este proceso es difícil si no se cuenta con una guía que contenga la información adecuada. Leer sobre el tema puede ayudar mucho, sin embargo, es mucho mejor y más eficiente contar con la asesoría de un experto en el tema.

Uno de los errores más frecuentes en la implementación de estas metodologías es la correcta automatización que requiere el periodo de prueba. Una de las preguntas más comunes que surgen es: “¿cómo puedo integrar pruebas automatizadas en mi solución CI/CD ?” Automatizar las pruebas de código es complejo pues requiere contar con herramientas adecuadas para el equipo y el tipo de proyecto, automatizar tareas repetitivas y tener procesos para revisar, planear y re-evaluar cada paso de la metodología.

Integración Cotinua

Integración Continua (Continuous Integration CI)

Con la integración continua los desarrolladores integran frecuentemente su código a la rama principal de un repositorio común. En lugar de desarrollar partes del código de manera aislada e integrarlas al final del ciclo de producción, un desarrollador contribuirá con cambios a una parte del repositorio varias veces al día.

La idea aquí es reducir los costos de integración, haciendo que los desarrolladores realicen integraciones más rápidamente y con mayor frecuencia. En la práctica, un desarrollador a menudo descubrirá conflictos entre el código nuevo y el existente en el momento de la integración. Si esta se realiza temprano y con frecuencia, la expectativa es que la resolución de conflictos será más fácil y menos costosa.

Entrega Continua

Entrega continua (Continuous Delivery CD)

La entrega continua es en realidad una extensión de la Integración Continua, en la cual el proceso de entrega de software se automatiza para permitir implementaciones fáciles y confiables en la producción, en cualquier momento.

Un proceso de Entrega Continua (CD) bien implementado requiere una base de código que se pueda desplegar en cualquier momento. Con la Entrega Continua, los lanzamientos de nuevos cambios ocurren de manera frecuente y rutinaria. Los equipos continúan con las tareas diarias de desarrollo con la confianza de que pueden mandar a producción un lanzamiento de calidad, en cualquier momento que deseen, sin una complicada implementación y sin tener que seguir pasos de manuales ejecutados por un especialista.

Se considera que la entrega continua es atractiva principalmente porque automatiza todos los pasos que van desde la integración del código en el repositorio base, hasta la liberación de cambios totalmente probados y funcionalmente adecuados.

El proceso consiste en una compleja automatización de los procesos de compilación (si es necesaria), pruebas, actualización de servidores de producción y ajuste de código usado en nuevas máquinas. En todo momento, se mantiene la autonomía del negocio de decidir qué modificaciones se publican y cuándo deben hacerse.

Despliegue Continuo

Despliegue Continuo (Continuous Deployment)

Esta es una modalidad más avanzada de Entrega Continua en la medida en que los despliegues a producción no pasan por una validación humana sino que están totalmente automatizadas.

La única forma de detener nuevos desarrollos en producción es a través de una prueba que falla e identifica los errores. La implementación es una manera de acelerar la retroalimentación, haciendo más eficiente el trabajo del equipo.

Gracias a este tipo de despliegue, los desarrolladores pueden llegar a ver su trabajo funcionando poco tiempo después de haberlo realizado, pero requiere el mayor esfuerzo en buenas prácticas y procesos automatizados.

¿Cuáles son los beneficios de cada práctica?

Cada una de las prácticas descritas requiere ciertas condiciones al tiempo que ofrece beneficios en su adopción. Exponemos estos a continuación:

Requisitos para Integración Continua

  • El equipo debe crear pruebas automatizadas para detectar inconsistencias en los nuevos desarrollos.
  • Necesitará un servidor de integración continuo que permita el monitoreo y la ejecución de las pruebas de forma automática para cada nueva confirmación que se logre.
  • Los desarrolladores deben fusionar los cambios de forma rápida y continua, por lo menos una vez por día.

Beneficios de Integración Continua

  • No existen tantos errores y se evita que estos se envíen a producción. Las pruebas automáticas captan las regresiones muy rápido.
  • Desarrollar las versiones es más fácil. Los problemas que ocurren en la integración se solucionan mucho más rápido.
  • Las pruebas ya no son un gran costo para el equipo, pues el CI permite realizar muchas pruebas en cuestión de segundos.
  • El control de calidad es mucho mejor.

ENTREGA CONTINUA

Requisitos:

  • Base sólida de Integración Continua. Su entorno de pruebas debe cubrir una gran cantidad de código base.
  • Las implementaciones que se requieren deben ser automatizadas. Aunque se activa de forma manual, una vez inicia no necesita de presencia humana.

Beneficios:

  • Mayor velocidad y menor complejidad en el proceso de desarrollo.
  • Lanzamientos mucho más seguidos, proporcionando retroalimentación inmediata.

DESPLIEGUE CONTINUO

Requisitos:

  • Mientras mejor sea la calidad de las pruebas, mejor será la calidad de cada uno de los lanzamientos.
  • Se debe mantener actualizado el proceso de documentación, coordinando la comunicación con otros departamentos como “soporte” o “marketing”.

Beneficios:

  • Todo se activa de forma automática para cada cambio.
  • Cada nueva versión tiene menos riesgos, pues a medida de que ocurren cambios se identifican los problemas que surgen y se pueden solucionar más fácilmente.
  • El flujo es continuo y de alta calidad. Este es el beneficio más importante para los clientes.

¿Qué necesito para adoptar CI/CD?

Implementar el proceso CI/CD podría ser un proyecto difícil y en ocasiones hasta desalentador. Más que un proyecto tecnológico es de cambio organizacional. Existen muchas herramientas que facilitan el desempeño del proceso e incluso existen complementos vía online que se pueden adquirir.

Si su organización tiene interés en implementar prácticas modernas de DevOps para entregar software más rápido con procesos CI/CD de la mano de expertos, lo invitamos a contactarnos.

Acerca de Aplyca:

Aplyca Tecnología SAS atiende a clientes corporativos de gran escala como Alkosto, Cámara de Comercio de Bogotá, y el Grupo Energía de Bogotá entre otros, con su experiencia como expertos en cloud computing, e-commerce, construcción y optimización de portales corporativos. Su portafolio completo  de servicios en soluciones cloud y desarrollo responde a la demanda de los clientes que requieren de servicios profesionales avanzados y experiencia en tecnologías cloud. Aplyca es Partner de Docker Inc., Consulting Partner de Amazon Web Services desde 2013 y Advanced Solution Partner de eZ Publish desde 2003.