Comprensión de la integración continua y la implementación continua

¿Escuchó CI/CD pero no está seguro de qué es?

Idealmente, los ingenieros de software son contratados para escribir el código que debe enviarse a un entorno de producción para que la empresa que necesita el producto pueda utilizarlo. Para satisfacer al negocio (a menudo llamados usuarios/clientes), es esencial que los productos estén libres de errores.

El enfoque típico que siguen los ingenieros de software es trabajar en ramas y crear una solicitud de extracción que actualice la rama maestra con la nueva actualización que se ha realizado. Hemos adoptado la práctica de escribir pruebas como un medio para garantizar que los nuevos cambios no introduzcan errores. Cuando los desarrolladores trabajan en una función en la mayoría de los casos, a menudo no crean una solicitud de incorporación de cambios hasta que han terminado por completo con la función. Lo que sucede cuando están listos es eso;

  • Dedican mucho tiempo a tratar de actualizar su base de código con los cambios que se han producido en la rama de producción mientras trabajaban.
  • Al hacerlo, tienen que solucionar una serie de conflictos de fusión.
  • También existe la posibilidad de que rompan la rama de producción, lo que afecta a quienes tiran de la rama antes de que se vea y solucione el problema.

Si alguna vez ha estado en esta situación, estará de acuerdo en que puede ser doloroso: a nadie le gusta pasar su día de trabajo así.

¿Cual es la solución?

Integración continua

Para evitar los escenarios que mencioné anteriormente; los equipos de ingeniería pueden adoptar la práctica denominada integración continua; como sugiere el nombre, implica la integración continua de los cambios de código realizados por los desarrolladores en la rama/repositorio compartido. El código que se va a integrar debe someterse a una prueba verificada para garantizar que no rompa la aplicación. Solo cuando pasa la prueba se integra

Para entender esto, imaginemos un escenario de la vida real donde hay un equipo de 10 desarrolladores. Estos desarrolladores crean una rama localmente en la que escriben código para la implementación de ciertas funciones. En lugar de enviar solicitudes de extracción cuando han terminado por completo con la función, optan por enviar solicitudes de extracción a medida que realizan pequeños cambios. Un ejemplo de dicho cambio será la creación de un nuevo modal, suponiendo que el desarrollador esté trabajando en una función que permita a los usuarios administrar tareas individuales en la aplicación. En lugar de esperar hasta que se complete la característica de la tarea, para adherirse a un patrón de integración continua, el desarrollador impulsa este pequeño cambio (en comparación con lo que está trabajando) y crea una solicitud de incorporación de cambios para combinar con el código.

Antes de integrar este nuevo cambio, se deben ejecutar una serie de pruebas.

Los equipos de ingeniería de software utilizan herramientas como Travis CI para crear estos procesos y pruebas de integración. Con herramientas como estas, las pruebas se automatizan, de modo que se ejecutan tan pronto como se envía una solicitud de extracción a la rama de destino seleccionada durante la configuración.

Se generan los resultados de las pruebas y el desarrollador que creó las solicitudes de incorporación de cambios puede ver los resultados y realizar los cambios necesarios. Los beneficios de apegarse a este patrón de integración de código lo menos posible y tener una prueba verificada para ejecutar son;

  • Es posible que el equipo involucrado sepa qué causó que el proceso de compilación o la prueba fallaran. Esto reduce la posibilidad de enviar un error a producción.
  • Si el equipo automatiza el proceso, tendrán el lujo de tiempo para concentrarse en ser productivos.

Lo importante a tener en cuenta en esta práctica es que alienta al equipo a enviar código a la rama principal con frecuencia. Hacer esto será ineficaz si otros miembros del equipo no acceden desde la rama principal para actualizar su repositorio local.

Tipos de pruebas

Al escribir pruebas que serán parte del proceso de integración, aquí están algunas que pueden implementarse en el proceso:

  • Integración: combina unidades individuales del software y las prueba como grupo.
  • Unidad: prueba unidades individuales o componentes del software, como métodos o funciones.
  • Interfaz de usuario: afirma que el software funciona bien desde la perspectiva del usuario.
  • Aceptación: prueba que el software cumple con los requisitos comerciales.

Es importante tener en cuenta que no necesita probarlos todos, ya que es posible que algunos de ellos ya estén cubiertos en el código escrito por el desarrollador.

Herramientas de integración continua

Sin entrar en profundidad, aquí tienes herramientas que puedes empezar a utilizar en tus proyectos actuales o nuevos;

  • Travis CI – conocido en el mundo del código abierto y le promete que tendrá su código probado sin problemas en minutos.
  • CI circular – le brinda poder, flexibilidad y control para automatizar su canalización desde el control hasta la implementación.
  • Jenkins – proporciona cientos de complementos para respaldar la creación, implementación y automatización de cualquier proyecto.

Si eres nuevo en Jenkins, te sugiero que tomes este Curso de Udemy para aprender CI con Java y .NET.

Implementación continua

¿De qué serviría si la función que crea permanece en el repositorio durante semanas o meses antes de que se implemente en el entorno de producción? Si bien los equipos de ingeniería pueden trabajar para integrar pequeños cambios en la rama principal a medida que suceden, también pueden impulsar estos cambios al entorno de producción lo antes posible.

El objetivo cuando se practica la implementación continua es hacer llegar los cambios a los usuarios tan pronto como los desarrolladores integren estos cambios en la rama principal.

Al igual que en el caso de la integración continua, al hacer uso de la implementación continua, se configuran pruebas y verificaciones automatizadas para garantizar que se verifiquen los cambios recién integrados. La implementación solo ocurre cuando se pasan estas pruebas.

Para que un equipo se beneficie de la práctica de la implementación continua, debe contar con lo siguiente;

  • Las pruebas automatizadas son la columna vertebral esencial de todas las prácticas de ingeniería continuas. En el caso de la implementación continua, el código que se implementará debe cumplir con el estándar que el equipo ha establecido para lo que pretenden enviar a los usuarios finales. Idealmente, si un nuevo cambio está por debajo del umbral, la prueba debería fallar y no integrarse. De lo contrario, se integra.
  • A pesar de tener pruebas automatizadas consecutivas, es posible que algunos errores se deslicen en el entorno de producción. Para esto, es necesario que el equipo pueda deshacer un cambio que se haya realizado: deshacer una implementación. Esto debería revertir el código de producción a lo que era antes de realizar el nuevo cambio.
  • Los sistemas de monitoreo son necesarios para realizar un seguimiento de los cambios que se han llevado al entorno de producción. Así es como el equipo puede rastrear los errores que encuentran los usuarios al hacer uso de los cambios implementados.

Las herramientas mencionadas para la integración continua también le brindan la funcionalidad para configurar un sistema de implementación continua. Hay muchos de ellos sobre los que también puedes leer.

Conclusión

La productividad de un equipo de desarrollo es vital para el éxito del negocio. Para asegurar que sean productivos, se deben adoptar prácticas que fomenten esto. La integración y el despliegue continuos son ejemplos de tales prácticas.

Con la integración continua, los equipos pueden impulsar tanto código como sea posible diariamente. Una vez logrado esto, resulta fácil implementar los cambios recién agregados para el usuario lo antes posible. La implementación de estos cambios permite obtener comentarios de los usuarios. Al final, la empresa podrá innovar en función de los comentarios recibidos, lo cual es beneficioso para todos.

También puede aprender a escalar y optimizar CI/CD.

Si es un desarrollador y está interesado en aprender CI/CD, consulte este curso brillante.

¿Te gustó leer el artículo? ¿Qué tal compartir con el mundo?