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。
関連ガイド
Exit Code 137 Explained: SIGKILL and the OOM Killer in CIWhat exit code 137 means in CI: the process received SIGKILL, almost always from the out-of-memory killer. Ho…
What Is a CI Runner? Managed vs Self-Hosted ExplainedA CI runner is the machine that executes your pipeline jobs. Learn how runners work, the difference between h…
Self-Healing CI: Recovering from OOM-Killed Jobs (Exit 137)Out-of-memory kills (exit 137) are mechanical, not code bugs. See the manual fix and how self-healing CI auto…