Execute automaticamente seu fluxo de trabalho do GitHub após falha
Às vezes, o fluxo de trabalho do GitHub Actions é temperamental e falha por razões aleatórias. Vamos ver como você pode executá-lo novamente automaticamente para economizar tempo.
Introdução
Nós amamos o GitHub Actions. Ele é poderoso e oferece uma camada gratuita generosa.
À medida que nosso projeto cresce, adicionamos mais e mais testes de integração para serem executados em nosso fluxo de trabalho do GitHub Actions. Como outros projetos legais, executamos nossos testes para cada pull request, push e release.
No entanto, devido à natureza dos testes de integração, às vezes nosso fluxo de trabalho falha por razões aleatórias. Pode ser um problema de rede, um travamento do navegador ou outras razões difíceis de reproduzir.
Quando o fluxo de trabalho falha, temos que executá-lo novamente manualmente. No início, não é um grande problema, mas ainda assim é irritante para desenvolvedores de alta eficiência como nós.
Como funciona
No momento da redação, o GitHub Actions não oferece uma maneira integrada de executar automaticamente um fluxo de trabalho que falhou. Então vamos detalhar e ver como podemos conseguir isso.
Quando um fluxo de trabalho NÃO está em execução e falhou, você pode executá-lo manualmente clicando no botão "Re-executar trabalhos". Ele abrirá um menu suspenso, e possui uma boa opção de "Re-executar trabalhos falhados" para pular os trabalhos bem-sucedidos.
Então a ideia é simples:
- Precisamos detectar quando um fluxo de trabalho falhou.
- Precisamos acionar a ação de re-execução APÓS a conclusão do fluxo de trabalho.
Aparentemente, não podemos fazer isso no mesmo fluxo de trabalho porque um fluxo de trabalho não pode fazer nada quando não está em execução. Então precisamos de outro fluxo de trabalho para monitorar o status do fluxo de trabalho anterior e acionar a ação de re-execução. Isso pode ser ilustrado da seguinte forma:
Atualize seus fluxos de trabalho
Crie um novo arquivo de fluxo de trabalho em seu repositório, por exemplo, .github/workflows/rerun.yml
:
Graças à CLI do GitHub, podemos facilmente observar o status de um fluxo de trabalho e re-executá-lo com dois comandos simples:
gh run watch
para observar o status de um fluxo de trabalho (documentação aqui).gh run rerun
para re-executar um fluxo de trabalho. A opção--failed
re-executará apenas os trabalhos que falharam (documentação aqui).
Tudo que você precisa fazer é fornecer o run_id
do fluxo de trabalho que falhou, o que pode ser feito usando o contexto github.run_id
. Por exemplo, você pode acionar o fluxo de trabalho de re-execução adicionando a seguinte etapa ao seu fluxo de trabalho original:
A condição if: failure()
só acionará a etapa quando o trabalho tiver falhado. A condição fromJSON(github.run_attempt) < 3
re-executará apenas nas duas primeiras tentativas. Você pode ajustar o número de acordo com suas necessidades.
Esta etapa usa o comando gh workflow run
para acionar o fluxo de trabalho de re-execução. Consulte a documentação para mais detalhes.
Bônus: Execute o fluxo de trabalho de re-execução a partir da branch que falhou
Se você quiser re-executar o fluxo de trabalho de re-execução a partir da branch que falhou, em vez da branch padrão, você pode usar o seguinte comando:
O contexto github.head_ref
será usado se for um pull request, caso contrário, o github.ref_name
será usado.
Créditos
A ideia desta abordagem é originalmente a partir deste comentário na discussão do GitHub.