exit codeとは何か?コマンドが成功をどう報告するか
exit codeは、プログラムが終了するときに返す小さな整数で、0は成功を意味し、0以外の値は何らかの失敗を意味します。
コマンドが終了すると、動作したかどうかをshellに伝える番号を返します。0は成功を意味し、それ以外は失敗を意味します。この単一の番号こそが、ステップが成功したか失敗したかをCIが判断する材料であり、そのためexit codeはあらゆるpipelineの心臓の鼓動と言えます。
exit codeとは何か
これはprocessが終了時に返すステータスで、0から255までの整数です。shellは最も新しいexit codeを特殊変数$?に格納し、コマンド実行直後に確認できます。
ゼロと0以外
慣例により0はコマンドが成功したことを意味します。0以外の値は失敗を示し、番号ごとにファイルの欠如や不正な引数など異なる問題を意味することがあります。
よくあるcode
- 0: 成功。
- 1: 一般的な、包括的なエラー。
- 127: コマンドが見つからない。
- 130: Ctrl-C(signalによる割り込み)で終了。
exit codeと制御フロー
shellは制御ロジックにexit codeを使います。cmd && nextはcmdが成功した場合のみnextを実行し、cmd || fallbackはcmdが失敗した場合のみfallbackを実行します。これがスクリプトが成功に基づいて分岐する仕組みです。
CIにおけるexit code
CIステップは最終的なexit codeが0であれば成功し、そうでなければ失敗します。set -eを使うと、スクリプトは最初の0以外の終了で中断するため、失敗したコマンドは無視されるのではなく即座にjobを失敗させます。
マネージドrunnerでの成功と失敗
Latchkeyのrunnerは、ステップが0以外で終了するとjobを失敗として報告します。本物の失敗はexit codeとして現れるため、一時的なインフラの問題は区別してリトライでき、一方で本当のテストやbuildの失敗は実行を止めます。
重要なポイント
- exit codeはプログラムが返す番号で、0が成功、0以外が失敗です。
- shellは最後のexit codeを
$?に格納し、&&や||を使ってそれに基づいて分岐します。 - CIはステップのexit codeから成功か失敗かを判断し、特に
set -eのもとでそうします。
関連ガイド
What Is set -e? Failing a Script on the First Errorset -e makes a Bash script exit immediately when a command fails. Learn how it works, its caveats, and why it…
What Is a Pipe? Connecting Commands in the ShellA pipe connects one command's output to the next command's input. Learn how shell pipes work and why pipefail…
What Is Exit Code 137? ExplainedExit code 137 means a process was killed by SIGKILL, almost always the out-of-memory killer in CI. Learn the…