runnerhut
Guias
Soluções para os problemas de CI que os times realmente enfrentam.
Velocidade13
Como acelerar GitHub ActionsSeu pipeline leva mais tempo do que qualquer um deseja esperar e não é óbvio para onde vai o tempo.Como encontrar a etapa lenta em um fluxo de trabalhoO pipeline é lento, mas cada etapa individual parece razoável.Como reduzir GitHub Actions partidas a frioOs trabalhos ficam parados por 30 a 90 segundos antes da execução da primeira etapa.Como diagnosticar tempos de fila de GitHub ActionsOs trabalhos ficam na fila por alguns minutos antes que um mensageiro os pegue.Como tornar o checkout do git mais rápidoações/checkout leva minutos em um repositório grande.Como executar CI em um repositório muito grandeCheck-out, indexação e relatórios de status são degradados à medida que o repositório cresce.Como acelerar checkouts do Git LFSOs objetos LFS são baixados em série e dominam o tempo de checkout.Como eliminar o tempo ocioso nos trabalhosOs trabalhos passam o tempo sem fazer nada – esperando por um serviço, uma suspensão ou um ciclo de pesquisa.Como lidar com trabalhos de longa duraçãoAlguns trabalhos duram horas e ocasionalmente atingem o limite de seis horas.Como executar compilações noturnas com eficiênciaAs compilações noturnas são caras e ninguém lê os resultados.Como impedir tempestades de reexecução de CIOs desenvolvedores executam repetidamente trabalhos com falha, multiplicando os custos e ocultando falhas reais.Como fragmentar testes em uma matrizUm longo trabalho de teste domina o pipeline.Como executar apenas os testes afetados por uma alteraçãoCada push executa todo o conjunto de testes, independentemente do que mudou.
Custo13
Como reduzir custos de GitHub ActionsA conta do CI cresce mais rápido que a equipe e ninguém sabe ao certo por quê.Como medir o custo de CI por solicitação pullVocê sabe o total mensal, mas não sabe quanto custa uma única solicitação pull.Como atribuir o custo de CI às equipesOs gastos de CI ocupam uma linha da fatura e nenhuma equipe se sente responsável por isso.Como definir um orçamento de minutos de CIOs gastos são descobertos no final do mês, em vez de controlados durante ele.Quando os corredores maiores realmente economizam dinheiroUm corredor maior custa mais por minuto, por isso não está claro se é mais barato no geral.Como reduzir custos de execução do macOSmacOS domina o projeto de lei de CI.Como reduzir os custos de saída de CIA transferência de dados representa uma parcela grande e crescente da conta BYOC.Como reduzir os custos de pull do ECRExtrações de imagens de contêiner geram cobranças significativas de transferência de dados.Como reduzir custos de transferência S3 em CIO tráfego de cache e artefatos para o S3 é caro.O custo real dos executores auto-hospedadosOs executores auto-hospedados parecem gratuitos perto do faturamento por minuto.Como usar instâncias spot para executores de CIAs instâncias sob demanda são caras para cargas de trabalho que podem ser inerentemente repetidas.Como dimensionar corretamente seus corredoresOs tamanhos dos corredores foram escolhidos uma vez e nunca revisados.Como executar CI economicamente em código abertoO CI de código aberto é gratuito em executores hospedados no GitHub, mas lento, e a auto-hospedagem não é segura.
Cache16
Como fazer com que os caches de CI realmente persistamOs caches estão configurados, mas a taxa de acertos é baixa.Como contornar o limite de cache de 10 GBSeus caches excedem 10 GB por repositório e começam a ser despejados silenciosamente.Como compartilhar um cache de compilação entre repositóriosCada repositório mantém seu próprio cache para as mesmas dependências compartilhadas.Como compartilhar um cache Docker entre trabalhosCada perna da matriz reconstrói as mesmas camadas.Como corrigir a invalidação de cache DockerAs camadas Docker são reconstruídas mesmo quando os arquivos relevantes não foram alterados.Como escrever uma chave de cache que atingeO cache está configurado, mas falha em todas as execuções.Como usar o ccache em GitHub ActionsAs compilações C e C++ recompilam tudo em cada execução.Como usar o sccache para compilações RustCargo reconstrói dependências sempre que o cache do diretório de destino falha.Como habilitar o cache de configuração do GradleGradle gasta de 30 a 60 segundos configurando antes de compilar qualquer coisa.Como armazenar em cache gerenciadores de conjunto de ferramentasmise, asdf ou proto reinstalam tempos de execução de linguagem em cada execução.Como armazenar em cache pacotes NuGetdotnet restore baixa os mesmos pacotes em cada execução.Como armazenar em cache as transformações JestJest transforma novamente todos os arquivos a cada execução.Como armazenar em cache pacotes vcpkg e ConanOs gerenciadores de dependência C++ reconstroem pacotes a partir do código-fonte em cada execução.Como armazenar em cache o Xcode DerivedDataO Xcode reconstrói todo o projeto em cada execução de CI.Escolhendo um back-end de cache buildxExistem quatro back-ends de cache e não está claro qual usar.Como manter o cache da ramificação base aquecidoNovas ramificações de recursos sempre começam com um cache frio.
Docker12
Como configurar o cache da camada DockerAs compilações do Docker levam dez minutos porque cada camada é reconstruída.Como otimizar um Dockerfile para CIPequenas alterações no código acionam reconstruções longas.Como usar compilações Docker de vários estágiosAs imagens são grandes e contêm ferramentas de construção que não deveriam ser enviadas.Como executar compilações Docker simultâneas com segurançaAs pernas da matriz paralela lutam e as construções ficam lentas ou falham.Como usar um construtor Docker remotoO cache de camada é transferido de e para o executor em cada compilação.Como construir imagens multiplataforma rapidamenteAdicionar linux/arm64 faz com que a construção demore vinte minutos.Como reduzir o tamanho da imagem do contêinerAs imagens têm centenas de megabytes e são lentas para serem executadas em todos os trabalhos.Como passar segredos para uma compilação DockerVocê precisa de um token de registro privado ou chave SSH durante a construção.Como configurar perfis do construtor DockerImagens diferentes precisam de recursos de construtor diferentes.Como construir muitas imagens a partir de um monorepoCada push cria todas as imagens no repositório.Como publicar em vários registrosA mesma imagem é construída uma vez por registro.Como configurar um cache pull-through do registroA extração de imagens é lenta e você continua atingindo os limites de taxa do Docker Hub.
braço647
Como mover CI para corredores arm64Você implanta em Graviton ou Ampere, mas constrói em x64.Lista de verificação de migração arm64Você deseja migrar para arm64 sem interromper o pipeline.Compilação cruzada versus arm nativo64Você precisa de binários arm64 e não tem certeza se deve fazer compilação cruzada ou construir nativamente.Por que as compilações do QEMU arm64 são tão lentasAdicionar linux/arm64 a uma compilação Docker torna-o vinte vezes mais lento.Corrigindo módulos nativos do Node em arm64A instalação do npm falha ou é compilada a partir do código-fonte em executores arm64.Consertando rodas Python no arm64pip install compila pacotes da fonte em arm64.Com base em executores AWS GravitonVocê deseja a vantagem de preço-desempenho do Graviton em CI.
macOS e iOS8
Como reduzir o tempo de construção do Xcode no CIAs compilações do Xcode levam vinte minutos em cada execução.Como acelerar os testes do simulador iOSOs testes do simulador levam meia hora.Como lidar com a assinatura de código iOS no CIA assinatura funciona localmente e falha intermitentemente no CI.Como autenticar aplicativos macOS em CIA notarização é lenta e ocasionalmente expira.Corrigindo o esgotamento do disco do executor do macOSOs trabalhos falham sem espaço restante no dispositivo no macOS.Como paralelizar iOS CIiOS CI é serial e os minutos do macOS são caros.Como fazer upload para TestFlight do CIOs uploads do TestFlight são lentos e às vezes falham após uma compilação bem-sucedida.Como fixar versões do XcodeUma atualização da imagem do executor alterou silenciosamente a versão do Xcode e sua construção mudou com ela.
Janelas5
Como tornar o Windows CI mais rápidoOs trabalhos do Windows demoram três vezes mais que os trabalhos equivalentes do Linux.Como armazenar em cache a saída do MSBuildCada compilação recompila todos os projetos.Instalando componentes do Visual Studio no CIUma carga de trabalho necessária do VS está faltando e a instalação leva quinze minutos.Como assinar binários do Windows no CIA assinatura Authenticode precisa de um certificado que não deve ser exposto.Como paralelizar testes .NETOs testes .NET são executados em série e levam vinte minutos.
Segurança6
Como gerenciar segredos em GitHub ActionsOs segredos estão espalhados pelas configurações do repositório e ninguém sabe o que ainda é usado.Como executar executores de CI dentro de sua VPCAs compilações precisam alcançar um serviço interno que não seja exposto publicamente.Como dar aos corredores um IP estáticoUm serviço de terceiros requer lista de permissões de IP e os IPs dos executores hospedados mudam constantemente.Como executar verificações de segurança sem diminuir a CIA verificação de vulnerabilidades adiciona minutos a cada solicitação pull.Como proteger sua cadeia de suprimentos de CIAs ações de terceiros são executadas com acesso ao seu repositório e segredos.Como fortalecer as permissões do fluxo de trabalhoTodo fluxo de trabalho é executado com acesso de gravação desnecessário.
Observabilidade10
Como coletar métricas do corredorVocê não pode saber se uma tarefa está vinculada à CPU, à memória ou ao disco.Como rastrear percentis de duração de construçãoO tempo médio de construção parece bom, mas os desenvolvedores ainda reclamam.Como exportar rastreamentos de CI com OpenTelemetryOs dados de tempo de CI ficam em uma ferramenta separada do restante da sua observabilidade.Como consultar dados de CI programaticamenteVocê precisa de dados de CI em um painel ou relatório semanal.Como executar um relatório semanal de integridade do CIO IC degrada gradualmente e ninguém percebe até que esteja ruim.Como alertar sobre regressões de CIUma mudança torna o CI 40% mais lento e passa despercebido por semanas.Como lidar com trabalhos de CI instáveisOs testes falham aleatoriamente e as pessoas tentam novamente até passarem.Como depurar um fluxo de trabalho com falhaUm trabalho falha na CI e funciona em qualquer outro lugar.Como definir níveis de serviço de CINinguém concorda sobre quão rápida a CI deve ser, por isso nunca é priorizada.Como expor dados de CI a agentes de IAOs agentes que depuram falhas de CI só têm texto de log para trabalhar.
Escala28
Como dimensionar executores auto-hospedadosOs executores auto-hospedados fazem fila no pico ou ficam ociosos e caros.Como usar grupos de corredoresQualquer repositório pode agendar jobs em qualquer executor.Como projetar uma estratégia de rótulo de corredorOs rótulos cresceram organicamente e ninguém sabe qual usar.Hospedado ou BYOC: como escolherVocê não tem certeza se deve usar executores hospedados ou implantar em sua própria nuvem.Como usar fluxos de trabalho reutilizáveis em grande escalaCinquenta repositórios possuem cinquenta cópias ligeiramente diferentes do mesmo pipeline.Como coordenar fluxos de trabalho entre repositóriosUma mudança em um repositório precisa acionar compilações em outros.Como construir imagens de corredor personalizadasCada trabalho leva minutos instalando as mesmas ferramentas.Como implementar atualizações de imagem base com segurançaUma atualização de imagem base interrompe compilações em vários repositórios de uma só vez.Como lidar com a carga de CI do bot de dependênciaO Dependabot abre trinta solicitações pull e picos de custos de CI.Como trabalhar com limites de simultaneidadeFila de trabalhos e não está claro qual limite é vinculativo.Como usar trabalhos de contêiner de maneira eficazOs trabalhos de contêiner oferecem reprodutibilidade, mas interrompem o cache.Como usar contêineres de serviço corretamenteOs testes falham intermitentemente na inicialização.Como construir uma vez e implantar muitas vezesO mesmo artefato é reconstruído para cada ambiente.Como estruturar trabalhos de implantaçãoAs implantações são lentas, arriscadas e difíceis de auditar.Como executar ambientes de visualização com eficiênciaCada solicitação pull aguarda a construção completa do ambiente.Como estruturar compilações de lançamentoAs compilações de lançamento são lentas e ocasionalmente não reproduzíveis.Como publicar artefatos de buildOs custos de armazenamento de artefatos estão aumentando e a retenção nunca foi configurada.Como lidar com uploads de artefatos grandesO upload da saída do build leva alguns minutos.Como obter compilações incrementais em CIO CI sempre faz uma compilação limpa, mesmo que seu sistema de compilação suporte compilação incremental.Como passar dados entre jobsOs empregos precisam compartilhar a produção da construção e não está claro como.Como usar bem as construções de matrizesA matriz cresceu e ninguém se lembra porque existe cada combinação.Como controlar a explosão da matrizUma pequena mudança de matriz triplicou o número de empregos e a conta.Como dimensionar executores para compilações JavaVocê está adivinhando o tamanho do corredor para uma construção Maven ou Gradle.Como dimensionar executores para suítes de testes NodeOs trabalhadores do Jest ou do Vitest estão morrendo de fome ou se debatendo e você não tem certeza de qual.Como dimensionar executores para suítes de testes Pythonpytest está sendo executado em um núcleo enquanto o executor tem oito inativos.Como dimensionar corredores para construções RustA carga ganha escala com núcleos, mas não está claro até onde isso vai.Como dimensionar corredores para compilações DockerVocê está escolhendo um tamanho de corredor para construções de imagens.Como dimensionar corredores para compilações AndroidAs montagens Gradle e os testes de instrumentação precisam de máquinas muito diferentes.