Saltar al contenido

runnerhut

Guías

Soluciones a los problemas de CI que los equipos sufren de verdad.

Velocidad13

Cómo acelerar las GitHub ActionsSu canalización demora más de lo que nadie quisiera esperar y no es obvio adónde va el tiempo.Cómo encontrar el paso lento en un flujo de trabajoEl proceso es lento, pero cada paso individual parece razonable.Cómo reducir los arranques en frío de GitHub ActionsLos trabajos permanecen en reposo durante 30 a 90 segundos antes de que se ejecute el primer paso.Cómo diagnosticar los tiempos de cola de GitHub ActionsLos trabajos se ponen en cola durante minutos antes de que un corredor los recoja.Cómo hacer que git checkout sea más rápidoacciones/pago toma minutos en un repositorio grande.Cómo ejecutar CI en un repositorio muy grandeEl pago, la indexación y los informes de estado se degradan a medida que crece el repositorio.Cómo acelerar los pagos de Git LFSLos objetos LFS se descargan en serie y dominan el tiempo de pago.Cómo eliminar el tiempo muerto en los puestos de trabajoLos trabajos pasan tiempo sin hacer nada: esperando un servicio, un sueño o un ciclo de votación.Cómo manejar trabajos de larga duraciónAlgunos trabajos duran horas y ocasionalmente alcanzan el límite de seis horas.Cómo ejecutar compilaciones nocturnas de manera eficienteLas compilaciones nocturnas son caras y nadie lee los resultados.Cómo detener las tormentas repetidas de CILos desarrolladores repiten repetidamente los trabajos fallidos, multiplicando los costos y ocultando fallas reales.Cómo fragmentar pruebas en una matrizUn largo trabajo de prueba domina el proceso.Cómo ejecutar solo las pruebas afectadas por un cambioCada impulso ejecuta todo el conjunto de pruebas independientemente de lo que haya cambiado.

Costo13

Cómo reducir los costos de GitHub ActionsLa factura de CI crece más rápido que el equipo y nadie está seguro de por qué.Cómo medir el costo de CI por solicitud de extracciónConoce el total mensual, pero no lo que cuesta una sola solicitud de extracción.Cómo atribuir el costo de CI a los equiposEl gasto en CI es una línea de la factura y ningún equipo se siente responsable de ello.Cómo establecer un presupuesto de minutos de CIEl gasto se descubre a final de mes en lugar de controlarse durante el mismo.Cuando los corredores más grandes realmente ahorran dineroUn corredor más grande cuesta más por minuto, por lo que no está claro si es más barato en general.Cómo reducir los costos del corredor de macOSmacOS domina el proyecto de ley de CI.Cómo reducir los costos de salida de CILa transferencia de datos representa una parte importante y creciente de la factura BYOC.Cómo reducir los costos de extracción de ECRLa extracción de imágenes de contenedores genera importantes cargos por transferencia de datos.Cómo reducir los costos de transferencia de S3 en CIEl tráfico de caché y artefactos hacia S3 es costoso.El coste real de los corredores autohospedadosLos corredores autohospedados parecen gratuitos junto a la facturación por minuto.Cómo utilizar instancias puntuales para corredores de CILas instancias bajo demanda son costosas para cargas de trabajo que son inherentemente reintentables.Cómo ajustar el tamaño de tus corredoresLos tamaños de los corredores se eligieron una vez y nunca se revisaron.Cómo ejecutar CI de forma económica en código abiertoLa CI de código abierto es gratuita en los ejecutores alojados en GitHub, pero es lenta y el autohospedaje no es seguro.

Almacenamiento en caché16

Cómo hacer que los cachés de CI realmente persistanLos cachés están configurados pero la tasa de aciertos es baja.Cómo evitar el límite de caché de 10 GBSus cachés superan los 10 GB por repositorio y comienzan a desalojarse silenciosamente.Cómo compartir una caché de compilación entre repositoriosCada repositorio mantiene su propia caché para las mismas dependencias compartidas.Cómo compartir un caché Docker entre trabajosCada pata de la matriz reconstruye las mismas capas.Cómo solucionar la invalidación de caché de DockerLas capas de Docker se reconstruyen incluso cuando los archivos relevantes no cambiaron.Cómo escribir una clave de caché que acierteEl caché está configurado pero falla en cada ejecución.Cómo usar ccache en GitHub ActionsLas compilaciones de C y C++ recompilan todo en cada ejecución.Cómo usar sccache para compilaciones RustCargo reconstruye las dependencias cada vez que falla el caché del directorio de destino.Cómo habilitar el caché de configuración de GradleGradle dedica de 30 a 60 segundos a configurar antes de compilar cualquier cosa.Cómo almacenar en caché los administradores de la cadena de herramientasmise, asdf o proto reinstalan los tiempos de ejecución del lenguaje en cada ejecución.Cómo almacenar en caché paquetes NuGetdotnet recovery descarga los mismos paquetes en cada ejecución.Cómo almacenar en caché las transformaciones de JestJest vuelve a transformar cada archivo en cada ejecución.Cómo almacenar en caché los paquetes vcpkg y ConanLos administradores de dependencias de C++ reconstruyen paquetes desde el código fuente en cada ejecución.Cómo almacenar en caché los datos derivados de XcodeXcode reconstruye todo el proyecto en cada ejecución de CI.Elegir un backend de caché buildxHay cuatro backends de caché y no está claro cuál usar.Cómo mantener caliente la caché de la rama baseLas ramas de nuevas funciones siempre comienzan con un caché frío.

Escala28

Cómo escalar corredores autohospedadosLos corredores autohospedados hacen cola en las horas pico o se quedan inactivos y son costosos.Cómo utilizar grupos de corredoresCualquier repositorio puede programar trabajos en cualquier ejecutor.Cómo diseñar una estrategia de etiquetas de corredorLas etiquetas crecieron orgánicamente y nadie sabe cuál usar.Alojado o BYOC: cómo elegirNo está seguro de si utilizar ejecutores alojados o implementarlos en su propia nube.Cómo utilizar flujos de trabajo reutilizables a escalaCincuenta repositorios tienen cincuenta copias ligeramente diferentes del mismo canal.Cómo coordinar flujos de trabajo entre repositoriosUn cambio en un repositorio debe desencadenar compilaciones en otros.Cómo crear imágenes de corredor personalizadasCada trabajo dedica minutos a instalar las mismas herramientas.Cómo implementar actualizaciones de imágenes base de forma seguraUna actualización de la imagen base interrumpe las compilaciones en muchos repositorios a la vez.Cómo manejar la carga de CI del bot de dependenciaDependabot abre treinta solicitudes de extracción y picos de costos de CI.Cómo trabajar con límites de concurrenciaHay cola de trabajos y no está claro qué límite es vinculante.Cómo utilizar los trabajos de contenedores de forma eficazLos trabajos de contenedor brindan reproducibilidad pero interrumpen el almacenamiento en caché.Cómo utilizar correctamente los contenedores de serviciosLas pruebas fallan intermitentemente al inicio.Cómo construir una vez e implementar muchas vecesSe reconstruye el mismo artefacto para cada entorno.Cómo estructurar los trabajos de implementaciónLas implementaciones son lentas, arriesgadas y difíciles de auditar.Cómo ejecutar entornos de vista previa de manera eficienteCada solicitud de extracción espera una compilación del entorno completo.Cómo estructurar compilaciones de lanzamientoLas versiones de lanzamiento son lentas y, en ocasiones, no reproducibles.Cómo publicar artefactos de compilaciónLos costos de almacenamiento de artefactos están aumentando y la retención nunca se configuró.Cómo manejar cargas de artefactos grandesCargar el resultado de la compilación lleva unos minutos.Cómo obtener compilaciones incrementales en CICI siempre realiza una compilación limpia aunque su sistema de compilación admita la compilación incremental.Cómo pasar datos entre trabajosLos trabajos deben compartir el resultado de la construcción y no está claro cómo.Cómo utilizar bien las construcciones matricialesLa matriz ha crecido y nadie recuerda por qué existe cada combinación.Cómo controlar la explosión de la matrizUn pequeño cambio de matriz triplicó el número de empleos y la factura.Cómo dimensionar los corredores para compilaciones de JavaEstás adivinando el tamaño del corredor para una construcción Maven o Gradle.Cómo dimensionar los corredores para los conjuntos de pruebas de NodeLos trabajadores de Jest o de Vitest se mueren de hambre o se agitan, y usted no está seguro de cuál.Cómo dimensionar los corredores para los conjuntos de pruebas de Pythonpytest se ejecuta en un núcleo mientras que el corredor tiene ocho inactivos.Cómo dimensionar los corredores para construcciones RustLa carga aumenta la escala con núcleos, pero no está claro hasta dónde llega.Cómo dimensionar los corredores para compilaciones de DockerEstá eligiendo un tamaño de corredor para la creación de imágenes.Cómo dimensionar los corredores para las compilaciones de AndroidLos ensamblajes de Gradle y las pruebas de instrumentación necesitan máquinas muy diferentes.