Skip to content
Latchkey

Fail-Fast vs Continue-on-Error: Controlando Como o CI Para

O fail-fast para no momento em que algo falha, para economizar tempo. O continue-on-error avança apesar de uma falha para reunir mais informações. Eles respondem a perguntas opostas - e se aplicam em níveis diferentes.

Essas duas configurações determinam como um pipeline reage a uma falha: abandonar cedo por velocidade, ou continuar por completude. Elas operam em escopos diferentes, e confundi-las leva a minutos desperdiçados ou a falhas ocultas.

Fail-fast (nível de matrix/strategy)

O fail-fast cancela os jobs paralelos restantes assim que um falha. Ele economiza minutos quando qualquer falha significa que a mudança inteira está errada. A desvantagem: você só fica sabendo da primeira combinação com falha, não se o bug é específico de um OS ou de uma versão. Desative-o quando quiser a grade completa de pass/fail.

Continue-on-error (nível de step/job)

O continue-on-error marca um step ou job para que sua falha não faça a execução falhar - o pipeline continua e reporta sucesso geral. Ele serve para steps não críticos ou informativos (um linter opcional, uma perna experimental da matrix) onde você quer o resultado registrado mas não como gate.

Non-gating step
- run: ./optional-linter.sh
  continue-on-error: true

Eles não são opostos um do outro

Uma confusão comum: o fail-fast governa se os *jobs irmãos* são cancelados em uma falha; o continue-on-error governa se a falha de um *step/job específico* conta contra a execução. Você pode desativar o fail-fast (rodar todas as combinações) e ainda ter alguns steps servindo de gate enquanto outros não.

Escolhendo

  • Use o fail-fast quando qualquer falha invalida a mudança inteira (feedback rápido).
  • Desative o fail-fast quando precisar ver o resultado de cada combinação.
  • Use o continue-on-error apenas para steps genuinamente opcionais e informativos.
  • Nunca use o continue-on-error para encobrir um step que deveria de fato servir de gate.

Principais conclusões

  • O fail-fast cancela os jobs irmãos na primeira falha para economizar tempo.
  • O continue-on-error impede que a falha de um step/job faça a execução inteira falhar.
  • Eles operam em escopos diferentes - não são o inverso um do outro.
  • O continue-on-error é para steps opcionais, nunca para esconder um gate real.

Guias relacionados