GitLab:ジョブが詰まった・時間切れで落とされた
ジョブが長いあいだ進まないと、GitLab はそのジョブを落とし、失敗の理由を記録します。しきい値はジョブの状態で決まります(GitLab の説明「ジョブのトラブルシューティング」・2026年10月28日に確認)。ジョブはその理由の文を添えて失敗します。たとえば:
The job was stuck in pending state with no matching runners available. Check your runner tags or configuration The job was running but showed no activity for an extended period. Check your job script or try again The running job exceeded the maximum execution time set for the job
どのしきい値で、どの理由になるか
- 待ち(合うランナーあり):24時間で落とされ、
stuck_pending_with_matching_runnersになります。文は「The job was stuck in pending state with matching runners available. Check your job configuration or try again」(合うランナーがあるのに待ちのまま詰まった。ジョブの設定を見るか、やり直す)。 - 待ち(合うランナーなし):1時間で落とされ、
stuck_pending_no_matching_runnersになります。文は「The job was stuck in pending state with no matching runners available. Check your runner tags or configuration」(合うランナーが無く待ちのまま詰まった。ランナーのタグか設定を見る)。 - 実行中(更新なし):更新の無いまま30分で落とされ、
no_updates_runningになります。文は「The job was running but showed no activity for an extended period. Check your job script or try again」(実行中のまま長く動きが無かった。ジョブのスクリプトを見るか、やり直す)。 - 取り消し中(更新なし):更新の無いまま30分で落とされ、
no_updates_cancelingになります。文は「The job was canceling but showed no activity for an extended period. Try again」(取り消し中のまま長く動きが無かった。やり直す)。 - 実行中(時間の上限を超えた):設定した時間の上限+15分で落とされ、
server_timeout_runningになります。文は「The running job exceeded the maximum execution time set for the job」(実行中のジョブが、ジョブに設定した最大の実行時間を超えた)。 - 取り消し中(時間の上限を超えた):設定した時間の上限+15分で落とされ、
server_timeout_cancelingになります。文は「The canceling job exceeded the maximum execution time set for the job」(取り消し中のジョブが、最大の実行時間を超えた)。
文は GitLab のソース(app/presenters/commit_status_presenter.rb・2026年10月28日に読んだもの)のとおりです。古いジョブや、19.0 より前の GitLab では、これらが置き換えた理由が出ることがあります。stuck_or_timeout_failure「There has been a timeout failure or the job got stuck. Check your timeout limits or try again」(時間切れか、ジョブが詰まった。時間の上限を見るか、やり直す)は、GitLab 19.0 以降は過去の記録のためだけに残っています。job_execution_timeout「The script exceeded the maximum execution time set for the job」(スクリプトが最大の実行時間を超えた)は、GitLab 19.1 で再実行の値としては非推奨になりました(retry:when)。待たずにすぐ失敗したジョブは、これらで落とされたのではありません。
どの時間の上限が効くか
- プロジェクト:プロジェクトの Settings > CI/CD で General pipelines を開き、Timeout に分か、
2 hoursのような書き方で入れます。10分以上・1か月未満で、既定は60分です。超えたジョブは失敗になります(ジョブの時間の上限)。 - ランナー:ランナーには最大のジョブの時間を持たせられ、プロジェクトの上限より短いときに使われます。ランナーが30分・プロジェクトが2時間なら、ジョブは30分で時間切れです。Maximum job timeout に秒で入れ(600 以上)、API なら
PUT /runners/:idのmaximum_timeoutです。GitLab.com の GitLab が用意するインスタンスのランナーは上書きできず、プロジェクトの上限が効きます(最大のジョブの時間)。 - ジョブ:
timeoutのキーワードで1つのジョブの上限を決めます。プロジェクトの上限より長くできますが、ランナーの上限より長くはできず、defaultには書けません(timeout)。 - 出力が無い:プロジェクトの設定のページは、1時間出力の無いジョブは上限にかかわらず落とされると付け加え、進み具合を出し続けるスクリプトを勧めています。
直す所
- 合うランナーが無い:ジョブの
tagsとランナーのタグを見比べます。ランナーはジョブのタグを全部持っている必要があります。タグ付きのジョブだけを動かすランナーはタグの無いジョブを待たせたままにし、タグの無いランナー(タグの無いジョブを動かす設定)はタグ付きのジョブを待たせたままにします(ランナーのタグの使い方)。GitLab は、ランナーが満たさないことのある条件に保護(protected)も挙げています。保護されたランナーは、保護されたブランチか保護されたタグのジョブしか動かしません。 - 合うランナーがあるのに待ちのまま:文のとおり、ジョブの設定を見るか、やり直します。
- 実行中に動きが無い:スクリプトが止まったか、ランナーの接続が切れたかです(GitLab の
retry:whenの説明)。長い段は進み具合を出すようにし、ランナーを確かめます。 - 時間の上限を超えた:ランナーの上限の範囲で、プロジェクトの Timeout かジョブの
timeoutを上げるか、ジョブを短くします。 - この失敗だけ再実行する:
retry:whenとretry:max(0・1・2)で、挙げた失敗の理由のときだけジョブをやり直せます。
test:
script: rspec
timeout: 2h
retry:
max: 2
when:
- stuck_pending_no_matching_runners
- no_updates_running
- server_timeout_running
IntelliJ IDEA で GitLab のジョブを見るなら
Lesstep の Pipeline Inbox for GitLab CI は、JetBrains IDE(2024.1 以降)のプラグインです。GitLab のプロジェクトのパイプラインを、ジョブを段ごとに並べて一覧にします。失敗したジョブの横には、状態・ジョブが動いた時間・GitLab が返す失敗の文(上のような文。スクリプトが失敗しただけのときは GitLab は文を返しません)を出し、ジョブのログを IDE の下のコンソールで開きます。見るのは無料、再実行・取り消し・実行は Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GITLAB は GitLab Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitLab Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitLab のジョブのログが見えない・空 · GitLab 18.0 のあとの「This job does not have a trace.」 · GitLab のパイプラインやジョブの断り(400・403・409・429) · GitLab のパイプラインがジョブ0件で失敗 · GitLab のジョブがリソース待ちで進まない · GitLab の「Insufficient permissions to set pipeline variables」 · GitLab の 404「Group Not Found」 · GitLab の「insufficient_scope」 · JetBrains の IDE で GitLab のパイプラインを見る · English