Skip to content
Latchkey

O Que É set -o pipefail? Capturando Falhas de Pipeline

set -o pipefail faz um pipeline retornar um exit code de falha se qualquer comando nele falhar, não apenas o último, fechando uma lacuna de falha silenciosa.

Um pipeline de shell normalmente reporta apenas o exit code de seu último comando, então um crash mais cedo na cadeia pode ser completamente mascarado. set -o pipefail corrige isso: se qualquer estágio do pipe falha, o pipeline inteiro falha. É a terceira peça do trio set -euo pipefail que torna scripts de CI confiáveis.

O que pipefail faz

Por padrão, o exit code de um pipeline é o do último comando. Com pipefail, o exit code do pipeline é o do comando mais à direita que falhou, então qualquer falha na cadeia aparece.

O problema da falha oculta

Considere generate_report | tee report.txt. Se generate_report trava mas tee tem sucesso, o pipeline sai com 0 e o passo passa, deixando um relatório vazio ou parcial. pipefail captura o crash.

Trabalhando com set -e

  • set -e sozinho não captura falhas dentro de um pipeline.
  • pipefail faz o pipeline retornar diferente de zero em qualquer falha.
  • Juntos, um estágio de pipe com falha realmente para o script.

Por que está no trio

A combinação set -euo pipefail cobre as três grandes lacunas: parar em erros, dar erro em variáveis não definidas e capturar falhas de pipeline. pipefail é a parte que a maioria das pessoas esquece, e a que esconde os bugs mais complicados.

pipefail no CI

Scripts de CI usam pipes intensamente, parseando logs, formatando saída, alimentando dados entre ferramentas. Sem pipefail, uma falha em um estágio inicial pode passar como sucesso. Habilitá-lo garante que o passo falhe quando qualquer estágio de um pipe falha.

Pipes confiáveis em runners gerenciados

Nos runners da Latchkey, adicionar set -o pipefail a um passo significa que um estágio quebrado em um pipeline falha o job de forma confiável. Isso remove uma categoria inteira de falhas de pipeline silenciosas e difíceis de depurar.

Principais conclusões

  • set -o pipefail faz um pipeline falhar se qualquer comando nele falhar.
  • Sem ele, apenas o exit code do último comando conta, mascarando falhas.
  • Ele completa set -euo pipefail, o padrão para scripts de CI confiáveis.

Guias relacionados