¿Qué es la automatización de la compilación en DevOps?

Las compilaciones automatizadas desempeñan un papel esencial en la integración continua (CI) y son un elemento clave de un proceso de CI/CD. Constituyen el primero de una serie de pasos automatizados diseñados para alertarle lo antes posible de cualquier problema en su código causado por sus últimos cambios.

Cuando hablamos de una compilación en este contexto, nos referimos a algo más que el acto de compilar y enlazar el código fuente para crear un ejecutable.

El proceso automatizado de compilación incluye una serie de comprobaciones, así como la recopilación de todas las piezas necesarias para que su programa se ejecute; incluso si está trabajando en un lenguaje interpretado, necesitará un paso de compilación.

Los archivos resultantes de la etapa de compilación -conocidos como artefactos de compilación- avanzan a través de su proceso de CI/CD hacia otras etapas de prueba seguidas de la puesta en escena. Si una compilación supera todos los pasos del proceso, está listo para su publicación.

¿Por qué automatizar el proceso de compilación e implementación?

Antes de ver lo que implica la automatización de compilaciones, consideremos por qué es importante un proceso de gestión de compilación automatizado.

Si está trabajando en un IDE, normalmente puede desencadenar una compilación con un atajo de teclado, así que ¿por qué automatizar el proceso?

Para empezar, aunque compilar localmente es útil cuando desea comprobar su trabajo o hacer una demostración rápida a su jefe, no es una buena práctica utilizar una compilación local para su canal de CI/CD.

El uso de un servidor de compilación dedicado garantiza un entorno limpio, que pronto señalará cualquier dependencia que falte y que, de otro modo, causaría problemas y retrasos cuando el resultado se implementase en un entorno de pruebas.

Sin una compilación automatizada que ponga en marcha las demás etapas del proceso, la CI/CD sería mucho menos fiable. Si tiene que acordarse de iniciar la sesión en el servidor de builds e iniciar cada build, incluida cualquier prueba, ir siguiendo el proceso por si algo fallase y luego trasladar el resultado al repositorio de artefactos para que pueda implementarse para las pruebas, entonces su proceso es propenso a errores.

Es fácil aplazar el inicio de la compilación hasta que tenga unos cuantos cambios más que probar, pero hacerlo va en detrimento de las ventajas de CI/CD.

Por último, la estrategia tras un proceso de CI/CD es fallar lo antes posible.

Cuanto antes descubra un problema, más fácil será solucionarlo y más eficaz será el proceso de automatización de la compilación. La automatización de la fase de compilación es más rápida que la activación manual de los distintos pasos implicados, y mucho más rápida que mover archivos y ejecutar pruebas a mano.

Al automatizar la compilación, se asegura de que todos los pasos se realicen en el orden correcto en cada confirmación (o en un lote de confirmaciones) y tiene la ventaja de obtener feedback rápido a la vez que le queda más tiempo libre.

¿Cómo funciona la automatización de la compilación en su proceso de CI/CD?

Si es nuevo en CI/CD, una de las primeras cosas que tendrá que hacer (después de ponerlo todo en el control de código fuente) es configurar compilaciones automáticas y desencadenarlas cada vez que alguien de su equipo realice un cambio. Quizá ya disponga de un script de compilación o un archivo de definición, ya sea por cortesía de su IDE o que lo haya escrito usted mismo.

Si no es así, tendrá que elegir una herramienta de automatización de compilación adecuada para el lenguaje en el que esté trabajando y especificar los archivos que hay que compilar, enlazar y empaquetar. A continuación, puede utilizar un servidor de CI para coordinar los distintos pasos, desde el desencadenamiento inicial hasta la recepción de feedback y la definición de las condiciones de fallo.

Desencadenar una compilación

La integración continua automatizada consiste en desencadenar una compilación después de cada confirmación a la rama maestra, de forma que cada cambio se integre y se pruebe poco después de realizarse. Si la compilación se completa con éxito, entonces se desencadena el siguiente paso del proceso.

La mayoría de las herramientas de CI permiten configurar desencadenantes adicionales para la compilación y personalizar las etapas del proceso que siguen.

Por ejemplo, quizá desee activar el mismo conjunto de pasos cuando se realicen confirmaciones en cualquier rama de un directorio concreto. Por otro lado, con ayuda de una herramienta de despliegue, es posible que desee programar una compilación nocturna que se someta a capas adicionales de pruebas y se utilice para refrescar los entornos de puesta en escena. También puede iniciar la etapa de compilación manualmente.

Ejecutar una compilación

Es una buena práctica ejecutar los pasos de compilación en un servidor de compilación dedicado en lugar de en su máquina de desarrollo. La compilación en un entorno limpio marcará cualquier dependencia que falte y evitará problemas del tipo "¡pero si en mi máquina funcionaba!".

El paso de compilación en sí invoca la herramienta de automatización de compilación elegida (como Maven, Ant o Gradle), que ejecuta las tareas especificadas en el script de compilación o el archivo de definición.

Una vez que tenga una idea de cuánto tiempo tardan sus compilaciones en ejecutarse, vale la pena utilizar una herramienta de despliegue para configurar una condición de fallo para las compilaciones que no se completan dentro de un período especificado. Esta práctica evita que las compilaciones de larga duración bloqueen los recursos.

Ejecutar pruebas

Además de preparar el código para su implementación, el proceso de gestión de build automatizado es un momento ideal para ejecutar otras comprobaciones en el código, como las pruebas de unidades y el análisis lint y de código estático. Ejecutar estas comprobaciones como parte de cada compilación con la ayuda de herramientas de despliegue y abordar cualquier problema que surja le ayudará a mejorar la calidad de su código.

Aunque estas comprobaciones se ejecutan antes de que se produzcan los artefactos de compilación, un fallo no tiene por qué detener el resto del proceso. Por ejemplo, puede decidir que quiere publicar el artefacto de compilación y avanzar a la siguiente etapa del proceso incluso si se encontraron errores durante el análisis lint. Configurar un umbral de calidad ayuda a evitar que los "pequeños" problemas se acumulen con el tiempo.

Publicar los artefactos de compilación

El resultado del proceso de compilación automatizado son artefactos de compilación, que pueden incluir instaladores, archivos WAR, bibliotecas y contenedores. La publicación de estos archivos en un repositorio de artefactos le proporciona una ubicación central desde la que puede implementar compilaciones en diferentes entornos, idealmente con ayuda de herramientas de despliegue.

Después de la compilación, la siguiente etapa de un proceso de CI/CD suele consistir en pruebas funcionales automatizadas, que requieren que la compilación se implemente en uno o más entornos de pruebas (a veces junto con otros componentes, como una base de datos u otros microservicios). Si estas pruebas se completan con éxito, la misma compilación puede utilizarse para refrescar los entornos de puesta en escena y, si corresponde, lanzarse al púbico.

Métricas y feedback

Puede ver los resultados de la fase de compilación, incluyendo si la compilación se creó con éxito y los resultados de las pruebas unitarias y otras comprobaciones, desde su herramienta de CI. Configurar las alertas para que le notifiquen los fallos le permite reaccionar rápidamente y hacer que su código vuelva a estar en condiciones para su lanzamiento.

Una herramienta de despliegue también cotejará los datos de su proceso para que pueda analizar las tendencias. Revisar el historial de builds y las métricas como la duración del build, las tasas de éxito y la cobertura del código puede darle información que le ayudará a mejorar su proceso de CI/CD.

Conclusión

La automatización de las compilaciones es uno de los primeros pasos esenciales en la creación de un proceso de CI/CD y la gestión de la compilación general. A este respecto, adoptar las herramientas de despliegue apropiadas es una buena práctica. La fase de compilación proporciona la primera ronda de feedback rápido y permite pasar a las siguientes etapas de la cadena de producción, desde las pruebas automatizadas hasta la entrega continua y la implementación.