Skip to content
Latchkey

CI/CDにおけるExit CodeとSignal: 実践ガイド

すべてのCI stepはexit codeで終わります。よくあるものを知っておけば、謎めいた失敗が明白な次のステップに変わります。

CI jobは、stepが0以外のexit codeを返すと失敗します。ほとんどのコードは、よく理解されたいくつかのバケットに収まります。通常の失敗、「command not found」、timeout、signalベースの終了です。ここでは、実際に目にするものが何を意味するかを説明します。

通常の失敗(1、2)

Exit 1は汎用の「何かが失敗した」です - ほぼどのツールもこれを使います。Exit 2はshell builtinの誤用を意味することが多いですが、多くのツール(make、grep、pytest)も自身のエラーに2を使います。どちらもそれ自体では多くを語りません。ログを読みましょう。

「Command not found」と実行不可(127、126)

Exit 127はshellがコマンドを見つけられなかったことを意味します - 通常はツールの欠如かPATHの問題です。Exit 126はファイルが見つかったが実行可能でないことを意味します(権限が誤っているか、インタープリタ行が壊れている)。

Timeout(124)

GNUのtimeoutは、コマンドが制限時間を超えると124を返します。CIではこれは一時的なハングや遅いネットワーク呼び出しであることが多いですが、本物のdeadlockであることもあります。

Signal(128 + N): 130、137、143

signal Nによってkillされたプロセスは128 + Nで終了します。よくあるもの: 130 = SIGINT(Ctrl-C / キャンセル)、137 = SIGKILL(通常OOM)、143 = SIGTERM(グレースフルな停止、キャンセル、またはspot-instanceのpreemption)。

重要なポイント

  • 128を超えるコードは、プロセスがsignalによってkillされたことを意味します(code - 128 = signal)。
  • 127 = command not found; 126 = 見つかったが実行可能でない。
  • 124 = timeout; CIではしばしば一時的。
  • 137 = SIGKILL(通常OOM); 143 = SIGTERM; 130 = SIGINT。

関連ガイド