Marcio Cunha

Build travado no GitHub Actions? Como cancelar jobs presos

Pipeline congelada consumindo minutos da sua franquia de CI? Aprenda a interromper execuções travadas no GitHub Actions usando a interface web e a linha de comando.

Marcio Cunha•4 min
Também disponível em:EnglishEspañol
Resumo
  • Processos congelados em ambientes de integração contínua desperdiçam minutos preciosos de franquia técnica
  • A interface web do GitHub oferece um botão nativo de cancelamento para interromper fluxos em andamento
  • A linha de comando oficial gh CLI permite encerrar execuções de maneira automatizada sem abrir o navegador
  • Problemas como loops infinitos em testes costumam ser a raiz oculta de tarefas presas na fila
  • Boas práticas de timeout evitam que scripts fiquem pendurados indefinidamente consumindo recursos

O que acontece quando um build congela no pipeline

Quem trabalha com desenvolvimento de software já passou pela frustração de ver uma esteira de entrega contínua (o sistema automatizado que testa e empacota o código) ficar presa em uma etapa específica. No GitHub Actions, essa situação ocorre quando um script entra em loop infinito, espera por uma resposta de rede que nunca chega ou esbarra em falhas de concorrência. Quando isso acontece, o cronômetro continua rodando, consumindo minutos valiosos da sua franquia e bloqueando outros deploys importantes.

Identificar o sintoma logo no início evita o esgotamento dos recursos contratados e reduz o estresse da equipe de engenharia. Em cenários críticos de produção, onde o deploy falha por problemas de infraestrutura, manter uma esteira travada impede que correções urgentes cheguem aos servidores. Por isso, saber agir rapidamente para interromper o processo é uma habilidade fundamental para qualquer desenvolvedor.

Como interromper execuções congeladas pela interface web

A forma mais direta de lidar com um job (uma tarefa específica dentro do fluxo) travado é utilizando o painel gráfico do GitHub. Acesse o repositório do seu projeto, clique na aba 'Actions' no menu superior e localize a execução que está empacotada com o ícone de carregamento amarelo. Ao abrir os detalhes da execução, você encontrará um botão vermelho escrito 'Cancel workflow' no canto superior direito da tela.

Ao clicar nesse botão, o GitHub envia um sinal de interrupção para os servidores virtuais que estão rodando o seu código, conhecidos como runners. Vale notar que o encerramento não é instantâneo: o sistema precisa de alguns segundos para forçar a parada dos processos ativos e liberar os recursos alocados. Se a interface web estiver lenta ou o site inteiro apresentar instabilidade, existe uma alternativa via terminal que costuma ser muito mais rápida e eficiente para engenheiros.

Usando a linha de comando para cancelar jobs rebeldes

Para quem prefere trabalhar direto no terminal, a ferramenta oficial de linha de comando do GitHub, chamada gh CLI, é uma aliada poderosa. Com ela, é possível listar e cancelar execuções sem precisar abrir o navegador, o que agiliza muito o fluxo de trabalho diário. Primeiro, certifique-se de estar autenticado executando o comando de login no seu terminal favorito.

Para encontrar o número de identificação da execução problemática, você pode rodar uma listagem rápida dos fluxos ativos. Em seguida, basta disparar o comando de cancelamento informando o código específico da tarefa congelada. Essa abordagem programática é excelente quando precisamos integrar rotinas de limpeza ou quando pipelines lentas em outras plataformas de CI exigem intervenções em lote através de scripts automatizados.

gh run list --status in_progress
gh run cancel <RUN_ID>

O que fazer quando o cancelamento normal não funciona

Em casos mais teimosos, clicar no botão de cancelar ou rodar o comando na CLI pode não surtir efeito imediato. Isso geralmente acontece porque o script em execução está preso em uma chamada de sistema bloqueante, como um teste de integração aguardando um banco de dados que não responde ou um comando de compilação travado em deadlock. Quando o runner não consegue responder ao sinal de término enviado pelo GitHub, a plataforma entra em um estado de espera prolongada.

Nessas situações extremas, a única saída é aguardar o timeout padrão configurado no arquivo de fluxo ou forçar o encerramento do runner caso você esteja hospedando seus próprios servidores de CI (self-hosted runners). Se o problema envolver falta de recursos físicos na máquina executoras, vale a pena conferir se o disco ficou cheio durante a execução dos testes, impedindo que o sistema operacional grave logs temporários e finalize as operações pendentes.

Estratégias para prevenir novos travamentos no futuro

Prevenir é sempre melhor do que remediar, e configurar limites de tempo (timeouts) explhícitos em cada passo do seu arquivo YAML é a melhor defesa contra builds infinitos. Por padrão, o GitHub Actions encerra jobs após seis horas, mas deixar um script rodando por tanto tempo é um desperdício financeiro inaceitável. Adicionar a diretiva 'timeout-minutes' garante que qualquer etapa que ultrapasse o tempo esperado seja abortada automaticamente.

Além dos limites de tempo, vale a pena revisar regularmente seus scripts de teste e rotinas de instalação de dependências para garantir que nenhum comando dependa de entradas manuais ou conexões de rede instáveis sem tratamento de erro. Com essas salvaguardas ativas, sua equipe ganha previsibilidade, evita surpresas na fatura do mês e mantém o fluxo de desenvolvimento ágil e seguro.