Los agentes son elementos fundamentales para el correcto funcionamiento de los pipelines en el ámbito de DevOps, ya que se encargan de ejecutar tareas específicas dentro de cada trabajo. En esta guía, exploraremos diversas estrategias sobre cómo optimizar el rendimiento de los agentes en DevOps, abordando desde su configuración inicial hasta las prácticas óptimas de mantenimiento. ¡Vamos allá!
Lo que vas a ver en este post:
¿Qué son los agentes en DevOps?
Los agentes son unidades de procesamiento utilizadas típicamente para ejecutar una tarea dentro de un trabajo. Reciben detalles de ejecución del servidor en forma de configuración y luego ejecutan esos conjuntos de pasos. Este patrón de software se utiliza ampliamente hoy en día por muchas aplicaciones. Por ejemplo, herramientas de compilación, prueba y despliegue como Azure DevOps, Jenkins o buildkite. Estas suelen estar disponibles como SaaS o instalación local. Estas herramientas permiten compilar, probar y desplegar elsoftware y/o configuración de manera continua.
Tipos de agentes en DevOps
Existen diferentes tipos de agentes en DevOps y su importancia en el ecosistema de desarrollo y despliegue de aplicaciones modernas.
Agentes persistentes
Los agentes persistentes se registran en el controlador y se añaden al conjunto de agentes una vez creados. Estos agentes están siempre en búsqueda de trabajos. Una vez que reciben un trabajo, lo ejecutan y devuelven su estado al servidor.
Configurando adecuadamente los agentes, se pueden conservar los datos del espacio de trabajo entre compilaciones, lo que puede acelerar el proceso de compilación. Sin embargo, no siempre se puede garantizar que el mismo agente sea seleccionado para una compilación incremental o para una etapa diferente en la misma compilación. Además, existe un cierto nivel de riesgo de seguridad asociado con los agentes persistentes. Si uno de los trabajos infecta al agente, todos los trabajos subsiguientes ejecutados en ese agente estarán comprometidos. Por tanto, se debe tener precaución adicional para asegurarse de que no se almacene información privada en el agente, ya que será compartida para conjuntos de trabajos futuros.
Agentes efímeros
En DevOps, algunas soluciones permiten el uso de agentes efímeros creados a partir de una imagen de VM o un contenedor proporcionado por el usuario. Estos agentes pueden ejecutarse en Kubernetes o en un pequeño binario que se ejecuta en una VM, capaz de iniciar contenedores para la ejecución de trabajos. Una vez que el trabajo ha finalizado, estos agentes son descartados.
Debido a su naturaleza efímera, estos agentes deben descargar el código fuente, binarios dependientes y herramientas para cada ejecución de trabajo. Esta latencia se suma al tiempo de ejecución del trabajo. Además, no son adecuados para compilaciones incrementales. Sin embargo, con los agentes efímeros, el proveedor de servicios en la nube gestiona la infraestructura y puede escalarla según la carga que se tenga.
Estrategias para mejorar el rendimiento de los agentes
Ahora que sabemos qué son los agentes, veamos diferentes formas de configurarlos para un mejor rendimiento.
Configuración y etiquetado basados en su función: Los agentes pueden etiquetarse en función de su configuración. Se puede personalizar cada agente en función de su función prevista. Un agente de compilación necesitaría un sistema de control de versiones, un compilador y un entorno de ejecución. Un agente de compilación dedicado no estará ejecutando pruebas, por lo que se necesita herramientas de prueba o navegadores) instalados en ellos. Mantener instalado el software y asignar el hardware según sea necesario.
Asignar trabajos a agentes relevantes: Una vez que se hayan separado los agentes según su función, toca asignar trabajos a los agentes. Asegurar que el trabajo de compilación de Windows que necesita MSBuild vaya a un agente etiquetado mejorará el rendimiento, ya que tendrá la mayoría de las dependencias instaladas y listas para usar. Lo mismo se aplica para un trabajo de prueba de Selenium que se enrute a un agente que tenga un navegador instalado.
Monitorización del rendimiento: Si la compilación está tardando más tiempo que los trabajos de prueba, considerar agregar agentes en el grupo de compilación. Si no se puede agregar hardware adicional, analizar otros grupos y mover algunos agentes de otros grupos ligeros a los grupos de compilación.
Mantenimiento: Para agentes persistentes, debes asegurarte de que se realice un mantenimiento regular y que los sistemas operativos/software se parcheen.
Estos pasos se aplican principalmente a las herramientas de compilación donde gestionas los agentes. Si utilizas agentes efímeros, se vuelve desafiante. En tal caso, querrás analizar de cerca los pipelines y la configuración del espacio de trabajo para optimizarlo.
Algunas prácticas recomendadas adicionales para agentes
Política de retención de datos: Para evitar problemas de espacio en disco a largo plazo, es recomendable establecer una política de retención para eliminar trabajos antiguos y liberar espacio.
Inyección de parámetros: Es importante que las herramientas de compilación, prueba y lanzamiento sigan el principio de inyección de dependencias en lugar de consultarlas directamente, lo que facilitará la migración y reducirá riesgos de seguridad.
Evitar votación: El uso de una arquitectura orientada a eventos en lugar de votaciones puede reducir la sobrecarga y el desperdicio de recursos en las herramientas de compilación, prueba y lanzamiento.
Gestión de archivos binarios: Evitar almacenar archivos binarios grandes en el repositorio de código fuente y opta por la gestión de paquetes para descargarlos según sea necesario, reduciendo así el tamaño del repositorio.
Almacenamiento en caché: Utilizar un almacenamiento en caché inteligente puede mejorar los tiempos de compilación y prueba. Es importante asegurarse de no cachear información sensible y añadir validaciones para proteger contra posibles ataques.
Antivirus para agentes: Para garantizar la seguridad de los agentes, se recomienda utilizar software antivirus. Sin embargo, se debe tener en cuenta que pueden generar falsas alarmas, por lo que es importante realizar auditorías continuas en colaboración con el equipo de seguridad.
Conclusión
Los agentes son una parte integral del sistema de compilación. La selección de agentes puede desempeñar un papel importante en el rendimiento de tu pipeline de compilación, prueba y lanzamiento de extremo a extremo. Entender los agentes y cómo juegan un papel en el sistema de compilación te ayudaría a diseñar tus pipelines de manera más eficiente. Estas sugerencias se pueden aplicar basándose en un análisis cuidadoso de los requisitos de tu sistema.
No te pierdas nada sobre DevOps, en nuestro canal de YouTube.