Back

Dicas e Truques para Depuração de GitHub Actions

Dicas e Truques para Depuração de GitHub Actions

Um workflow que passou ontem agora falha com um erro enigmático. Você não mudou nada. Os logs mostram uma parede de etapas recolhidas, e em algum lugar ali está o problema real. Este cenário frustra todo engenheiro que mantém pipelines de CI/CD.

A depuração eficaz de GitHub Actions requer saber quais ferramentas existem e quando usá-las. Este guia cobre as técnicas estáveis e perenes que ajudam você a diagnosticar falhas de workflow rapidamente—sem perder tempo com abordagens que não funcionarão.

Principais Conclusões

  • Habilite o logging de debug com os secrets ACTIONS_STEP_DEBUG e ACTIONS_RUNNER_DEBUG para maior visibilidade sobre falhas de workflow
  • Adicione etapas de diagnóstico para exibir detalhes do ambiente e use continue-on-error: true temporariamente para isolar etapas instáveis
  • Valide workflows localmente com actionlint e nektos/act antes de fazer push para detectar erros antecipadamente
  • Fixe versões de actions em tags ou SHAs específicos para prevenir quebras inesperadas de mudanças upstream

Habilite o Logging de Debug para Maior Visibilidade

Quando os logs padrão do GitHub Actions não revelam detalhes suficientes, habilite o logging de debug. Dois secrets de repositório controlam este comportamento:

  • ACTIONS_STEP_DEBUG: Defina como true para ver saída verbosa para cada etapa
  • ACTIONS_RUNNER_DEBUG: Defina como true para informações de diagnóstico no nível do runner

Você também pode acionar o modo debug sem modificar secrets. Ao re-executar um workflow que falhou, selecione “Re-run jobs” e marque a opção “Enable debug logging”. Isso fornece traces detalhados para aquela execução específica sem afetar execuções futuras.

O visualizador de logs do GitHub suporta streaming ao vivo e exibição expandida de logs recentes, facilitando o acompanhamento de jobs de longa duração em tempo real. Use a função de busca dentro das etapas expandidas para localizar erros específicos em vez de rolar por tudo.

Adicione Etapas de Diagnóstico ao Seu Workflow

Às vezes você precisa de informações de depuração personalizadas. Adicione etapas que exibem detalhes do ambiente antes de operações críticas:

- name: Debug environment
  run: |
    echo "Node version: $(node --version)"
    echo "Working directory: $(pwd)"
    echo "Event: ${{ github.event_name }}"
    env | sort

Para etapas que falham de forma imprevisível, use continue-on-error: true temporariamente. Isso permite que etapas subsequentes sejam executadas, expondo se a falha se propaga ou permanece isolada:

- name: Potentially flaky step
  id: tests
  continue-on-error: true
  run: npm test

- name: Capture state after tests
  if: always()
  run: echo "Tests completed with status ${{ steps.tests.outcome }}"

Remova continue-on-error assim que identificar a causa raiz.

Valide Workflows Localmente Antes de Fazer Push

Fazer push de commits apenas para testar sintaxe de workflow desperdiça tempo e polui seu histórico. Use actionlint para detectar erros de YAML e erros de expressão antes que cheguem ao GitHub:

actionlint .github/workflows/

Para testes locais mais abrangentes, nektos/act executa workflows em containers Docker que aproximam o ambiente do runner do GitHub. Ele não replicará tudo—retenção de artefatos e versões exatas de software diferem—mas valida a ordem de execução das etapas e detecta problemas óbvios de configuração.

act -P ubuntu-latest=catthehacker/ubuntu:act-latest

Ambas as ferramentas fornecem ciclos de feedback rápidos que reduzem significativamente os ciclos de troubleshooting de workflow.

Entenda o Comportamento de Artefatos

Artefatos no GitHub Actions têm escopo de job. Múltiplos jobs não podem fazer upload para o mesmo nome de artefato sob o sistema v4—tentativas entrarão em conflito em vez de mesclar. Sempre dê a cada job um nome de artefato único, especialmente em builds de matriz ou paralelos, para evitar falhas de upload e garantir recuperação previsível.

Use Workflows Reutilizáveis para Reduzir Instabilidade

Lógica de workflow duplicada entre repositórios introduz inconsistência. Quando as mesmas etapas existem em múltiplos lugares, a depuração se torna mais difícil porque as correções devem se propagar por toda parte.

Workflows reutilizáveis centralizam padrões comuns. Quando você corrige um bug ou melhora a confiabilidade em um lugar, todos os workflows que o chamam se beneficiam. Esta abordagem também torna a depuração de CI/CD mais fácil de aplicar consistentemente em toda a sua organização.

Fixe Versões de Actions e Evite Actions Descontinuadas

Referencie actions por SHA ou tags de versão específicas em vez de @main ou @master. Referências não fixadas podem quebrar workflows quando mudanças upstream ocorrem:

# Prefira isto
uses: actions/checkout@v4

# Evite isto
uses: actions/checkout@main

Muitas actions auxiliares de debug mais antigas usam versões descontinuadas do Node.js. O GitHub avisa sobre estas nos logs de workflow. Substitua-as por alternativas mantidas para evitar falhas inesperadas quando o GitHub eventualmente remover o suporte para runtimes legados.

Proteja Secrets na Saída de Debug

O logging de debug expõe mais informações, o que cria risco. Nunca exiba secrets diretamente com echo, mesmo em etapas de debug. O GitHub mascara secrets conhecidos, mas valores derivados ou correspondências parciais podem vazar. Revise a saída de debug antes de compartilhar logs publicamente ou em relatórios de issues.

Conclusão

O troubleshooting de workflow se torna gerenciável quando você conhece as técnicas certas. Habilite o logging de debug para visibilidade, adicione etapas de diagnóstico estrategicamente, valide localmente com actionlint ou act, e mantenha consistência através de workflows reutilizáveis. Estas melhores práticas de GitHub Actions se aplicam independentemente de como a plataforma evolui—são fundamentos que tornam a depuração de CI/CD mais rápida e menos frustrante.

FAQs

Falhas aleatórias frequentemente decorrem de dependências externas mudando, como versões de actions não fixadas sendo atualizadas, problemas de registro de pacotes ou limitação de taxa. Timeouts de rede e restrições de recursos em runners compartilhados também podem causar falhas intermitentes. Habilite o logging de debug e verifique se a falha se correlaciona com horários específicos ou disponibilidade de serviços externos.

Use o contexto steps com o atributo id da etapa. Primeiro, atribua um id à sua etapa, depois referencie suas saídas usando a sintaxe steps.step_id.outputs.output_name. Para o resultado de uma etapa com continue-on-error, use steps.step_id.outcome que retorna success, failure, cancelled ou skipped.

Sim. Use actionlint para validar sintaxe YAML e expressões localmente. Para testes mais completos, nektos/act executa workflows em containers Docker que simulam o ambiente do runner do GitHub. Embora o act não possa replicar todos os recursos do GitHub, ele detecta a maioria dos erros de configuração e valida a ordem de execução das etapas antes de você fazer push.

ACTIONS_STEP_DEBUG habilita saída verbosa para etapas individuais do workflow, mostrando informações detalhadas sobre a execução de cada action. ACTIONS_RUNNER_DEBUG fornece informações de diagnóstico de nível mais baixo sobre o próprio runner, incluindo configuração de ambiente e operações internas. Para a maioria dos cenários de depuração, ACTIONS_STEP_DEBUG fornece detalhes suficientes.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay