Cómo acelerar sus compilaciones – Grape Up

Con proyectos de TI en constante crecimiento, la automatización es hoy en día imprescindible. Desde creación de código fuente y pruebas para versionar e implementar, herramientas CI / CD fueron siempre el miembro anónimo del equipo, que hizo el trabajo que ningún desarrollador estaba ansioso por hacer. Hoy, veremos algunos consejos sobre una de las herramientas más nuevas: Concourse CI. Primero, aceleraremos nuestros trabajos de Concourse, luego facilitaremos el desarrollo de las nuevas canalizaciones para nuestros proyectos.

Agrega tus pasos

De forma predeterminada, las tareas de Concourse en un trabajo se ejecutan por separado. Esto está perfectamente bien para trabajos pequeños de Concourse que duran uno o dos minutos. También funciona bien al comienzo del proyecto, ya que solo queremos que el proceso se ejecute. Pero en algún momento, sería bueno optimizar nuestras compilaciones.

La forma más sencilla de ahorrar tiempo es comenzar a utilizar la palabra clave agregada. Ejecuta todos los pasos declarados dentro de él en paralelo. Esto conduce a un ahorro de tiempo tanto en la ejecución de la lógica del script como en la sobrecarga que se produce al iniciar la siguiente tarea.

Concourse CI

Limpio, entonces, ¿dónde podemos usarlo? Hay 2 partes principales de un trabajo en las que la agregación es útil:

1. Descarga y carga de recursos.
2. Ejecución de pruebas.

Las declaraciones get y put son objetivos ideales porque la descarga y carga de recursos suelen ser completamente independientes. Las pruebas de integración, las pruebas de contrato, las pruebas de vulnerabilidades de dependencia y similares también son candidatos probables si no interfieren entre sí. ¿Tareas de construcción del proyecto? Probablemente no, porque normalmente son secuenciales y requerimos que su salida continúe.

¿Cuánto tiempo se puede ahorrar agregando? Por supuesto, depende. Suponiendo que no podemos agregar los pasos que compilan y prueban nuestro código, obtenemos la ventaja de la carga y descarga simultáneas de nuestros recursos, así como también la sobrecarga paso a paso menos visible. Por lo general, ahorramos hasta dos, tal vez incluso tres minutos. El mayor ahorro que obtuvimos fue de más de media hora a menos de diez minutos. La mayor parte del tiempo ahorrado provino de ejecutar tareas relacionadas con las pruebas en paralelo.

Utilice imágenes de Docker con herramientas integradas

Esta mejora es más complicada de implementar pero produce una notable ganancia de tiempo de construcción. Cada tarea se ejecuta en un contenedor y la imagen de ese contenedor tiene un determinado conjunto de herramientas disponibles. En algún momento del proyecto llega un momento en el que ninguna imagen disponible tiene la herramienta necesaria. Lo primero que hacen los desarrolladores es descargar esa herramienta manualmente o instalarla usando un administrador de paquetes como parte de la ejecución de la tarea. Esto significa que la herramienta se recupera cada vez que se ejecuta la tarea. Además de eso, la salida de la consola está inundada de registros de instalación de herramientas.

La solución es preparar una imagen de contenedor personalizada que ya tenga todo lo necesario para completar una tarea. Esto requiere algunos conocimientos no relacionados directamente con Concourse, sino, por ejemplo, con Docker. Con un dockerfile corto y un par de comandos de terminal, obtenemos una imagen con las herramientas que necesitamos.

1. Cree dockerfile.
2. Dentro del archivo, instale o copie sus herramientas usando los comandos EJECUTAR o COPIAR.
3. Genere la imagen utilizando la ventana acoplable build.
4. Etiquete y envíe la imagen al registro.
5. Cambie la parte image_resource en su tarea de Concourse para usar la nueva imagen.

Eso es todo, ¡ya no tendrá que esperar a que se instalen las herramientas cada vez! Incluso podríamos crear una canalización para construir e impulsar la imagen por nosotros.

Crear canalizaciones a partir de una plantilla

Pasando de medidas que ahorran tiempo a consejos prácticos para desarrolladores, aquí hay uno para proyectos más grandes. Por lo general, tienen un determinado conjunto de canales de compilación similares con las únicas diferencias que son las credenciales, los nombres de los servicios, etc., parámetros que no están codificados en el script del canal y se inyectan en el momento de la ejecución desde una fuente como CredHub. Esto es típico de los proyectos web de Cloud Foundry y Kubernetes con microservicios. Con un poco de creatividad, podríamos obtener un script bash o python para generar esas canalizaciones a partir de un solo archivo de plantilla.

Primero, necesitamos tener un archivo de plantilla. Tome una de las especificaciones de su canalización existente y sustituya los nombres de los parámetros por su versión independiente de la canalización. Nuestro script necesita recorrer una lista de nombres de canalización, sustituir los nombres de parámetros genéricos con los relacionados con la canalización adecuados que están disponibles en Credhub y luego configurar la canalización en Concourse con la CLI fly.

La segunda parte de la ecuación aquí es un trabajo de Concourse que busca cambios en el archivo de plantilla en un repositorio de Git e inicia el script de generación de canalizaciones. Con esta solución, tenemos que cambiar solo un archivo para actualizar todas las canalizaciones, y además de eso, un compromiso con el repositorio de canalizaciones es suficiente para activar la actualización.

Inicie sesión en un contenedor de tareas para depurar problemas

Al depurar fallas de tareas de Concourse, la principal fuente de información sobre fallas es la consola. Un vistazo rápido a la salida es suficiente para resolver la mayoría de los problemas. Otros problemas pueden requerir un vistazo rápido al entorno de una tarea fallida. Podemos hacer eso con el comando fly intercept.

Fly intercept nos permite iniciar sesión en un contenedor que ejecutó una tarea específica en una ejecución de trabajo específica. En el interior podemos ver el estado del contenedor cuando finalizó la tarea y podemos intentar encontrar la raíz del error. Puede que haya una variable de entorno vacía; nos olvidamos de establecer el parámetro adecuado en un archivo yml. El recurso tiene una estructura diferente dentro de él; necesitamos cambiar el script de la tarea o la estructura del recurso. Cuando termine el trabajo, no olvide cerrar la sesión del contenedor. ¡Ah, y no espere demasiado! Concourse puede desechar esos contenedores en cualquier momento.

Usar el complemento Visual Studio Code Concourse

Lo último de lo que quiero hablar es del editor de canalizaciones de CI de Concourse para Visual Studio Code. Es un complemento que ofrece sugerencias, ventanas emergentes de documentación y verificación de errores para archivos yml de Concourse. Si usa la plantilla de canalización y la tarea de generación de la sugerencia anterior, cualquier error de sintaxis en su plantilla se descubrirá tan tarde como la tarea de actualización que actualiza las canalizaciones desde la plantilla. Eso es porque usted mismo no ejecutará fly set-pipeline. La solución de este problema requiere una nueva confirmación en el repositorio de canalización.

Con el complemento, cualquier recurso no utilizado o un error tipográfico en el nombre de la propiedad se detectará de inmediato. El complemento también lo ayudará a escribir nuevas piezas de código de automatización al sugerir palabras clave y mostrar los valores disponibles para los comandos de Concourse. La única acción necesaria es actualizar la sección de archivos.asociaciones en la configuración. Usamos directorios separados para pipelines y tareas, por lo que lo hemos configurado de la siguiente manera:

Conclusión

¡Y eso es! Esperamos que haya encontrado al menos un consejo útil y lo utilice en su proyecto. La agregación es fácil de implementar y es bueno tener el hábito de agregar pasos desde el principio. Las imágenes personalizadas y las plantillas de canalización son beneficiosas en proyectos más grandes en los que ayudan a que CI sea menos torpe. Finalmente, fly intercept y el complemento VSC son solo herramientas adicionales para ahorrar tiempo durante el desarrollo de la tubería.

  • Add Your Comment