Pular para o conteúdo

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.

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.