Skip to content
Latchkey

Exit Codes e Signals em CI/CD: Um Guia Prático

Todo step de CI termina com um exit code. Conhecer os mais comuns transforma uma falha enigmática em um próximo passo óbvio.

Um job de CI falha quando um step retorna um exit code diferente de zero. A maioria dos códigos cai em alguns grupos bem compreendidos: falhas comuns, "command not found", timeouts e terminações baseadas em signal. Aqui está o que significam os que você realmente vê.

Falhas comuns (1, 2)

Exit 1 é o genérico "algo falhou" - quase qualquer ferramenta o usa. Exit 2 frequentemente significa uso incorreto de um builtin do shell, mas muitas ferramentas (make, grep, pytest) também usam 2 para seus próprios erros. Nenhum diz muito por si só; leia os logs.

"Command not found" e não executável (127, 126)

Exit 127 significa que o shell não conseguiu encontrar o comando - geralmente uma ferramenta ausente ou um problema de PATH. Exit 126 significa que o arquivo foi encontrado mas não é executável (permissões erradas ou uma linha de interpretador quebrada).

Timeouts (124)

O timeout do GNU retorna 124 quando um comando excede seu limite de tempo. No CI isso é frequentemente um travamento transitório ou uma chamada de rede lenta, embora também possa ser um deadlock genuíno.

Signals (128 + N): 130, 137, 143

Um processo morto pelo signal N sai com 128 + N. Os mais comuns: 130 = SIGINT (Ctrl-C / cancelamento), 137 = SIGKILL (geralmente OOM), 143 = SIGTERM (parada graciosa, cancelamento ou preempção de spot-instance).

Principais conclusões

  • Códigos acima de 128 significam que o processo foi morto por um signal (code - 128 = signal).
  • 127 = command not found; 126 = encontrado mas não executável.
  • 124 = expirou por timeout; muitas vezes transitório no CI.
  • 137 = SIGKILL (geralmente OOM); 143 = SIGTERM; 130 = SIGINT.

Guias relacionados