GitLab がジョブのログを断った理由・ログが空の理由
ジョブのログは GET /projects/:id/jobs/:job_id/trace で読みます。GitLab は順に3つを確かめます。あなたのアカウントがプロジェクトのジョブを読めるか(読めなければ 403)、その ID がこのプロジェクトのログのあるジョブか(でなければ 404)、このジョブのログを読めるか(読めなければまた 403)。以下はすべて GitLab のソース(lib/api/ci/jobs.rb・app/policies/ci/build_policy.rb・Ci::Build#debug_mode?)を 2026年10月24日に読んで確かめたものです:
HTTP/1.1 403 Forbidden
{"message":"403 Forbidden"}
ログは 403 なのに、ジョブそのものは開ける
ジョブ(GET /projects/:id/jobs/:job_id)は3つ目を確かめないので、ジョブは 200、ログは 403 になります。次の2種類のジョブのログは、プロジェクトのジョブを更新できる人、つまり Developer 以上の役割の人にだけ表示されます:
- そのジョブでデバッグログが有効:
CI_DEBUG_TRACEかCI_DEBUG_SERVICESがtrueになっているジョブです。GitLab の説明では、.gitlab-ci.ymlか CI/CD 変数でデバッグログを有効にすると、Developer 未満の役割の人はログを見られません。また、Runner のローカル変数にCI_DEBUG_TRACEを置いた場合は役割が確かめられず、ジョブのログを見られる人全員にデバッグログが見える、と注意しています。 - エージェントのフローが動かしたジョブ:パイプラインの source が
duo_workflowのジョブです。いまの GitLab のソースでは、このログは内部メモに書かれた内容を繰り返すことがあるため、Developer 以上に限られています。
ジョブそのものも 403
この場合は、プロジェクトの CI/CD の設定かあなたの役割のために、アカウントがプロジェクトのジョブをまったく読めません。ログのせいではありません。read_api か api の権限が無いトークンも 403 で断られますが、そのときの答えには insufficient_scope と書いてあります。足す権限の見つけ方へ。
404「404 Not found」
ログはプロジェクトのビルドからしか読まないので、下流のパイプラインを始めるトリガージョブは 404 になります。そのログは、始めたパイプラインのジョブにあります。ほかのプロジェクトのジョブの ID や、消したパイプラインのジョブの ID も 404 です。
200 で中身が空
GitLab の説明の表では、ログの無いジョブは 404 とされていますが、ソースでは 200 で中身が空になります。まだ何も書いていないジョブ(created・pending・manual・skipped)か、ログを消したジョブです。POST /projects/:id/jobs/:job_id/erase は、ジョブの成果物とログを消します。
いまどうなっているか
curl --header "PRIVATE-TOKEN: your-token" "https://gitlab.com/api/v4/projects/GROUP%2FPROJECT/jobs/123"
status で、ジョブが動いたかがわかります。ログが消されていれば erased_at が null ではありません。gitlab.com はあなたのサーバーの住所に置き換えてください。
直し方
- デバッグログ:Developer 以上の役割の人にログを読んでもらうか、その役割をもらう。原因がわかったら
CI_DEBUG_TRACEかCI_DEBUG_SERVICESを外す。外した後のジョブのログは、プロジェクトのジョブを読める人全員に表示されます。 - エージェントのフローのジョブ:同じく Developer 以上の役割が要ります。
- ジョブそのものも 403:役割かプロジェクトの CI/CD の公開範囲を、メンテナーに相談する。
- 404:トリガージョブなら、下流のパイプラインを開いて、そのジョブのログを見る。それ以外なら、ジョブの ID とプロジェクトを確かめる。
- 空:ジョブが始まるまで待つ。消したログは戻らないので、新しいログが要るならジョブをもう一度実行する。
IntelliJ IDEA で GitLab のジョブのログを見るなら
Lesstep の Pipeline Inbox for GitLab CI は、JetBrains IDE(2024.1 以降)のプラグインです。GitLab のプロジェクトのパイプラインをジョブといっしょに一覧にし、ジョブのログを IDE の下のコンソールで、ログの色のまま開きます。動いているジョブは書かれるそばから追います。終わったジョブにログが無いときは、ジョブの状態を添えてそう言います。GitLab がトークンなしではログを渡さないところでは、トークンを足すように言います(read_api で足ります)。1.0.16 からは、ジョブは見えるのにログを断られたとき(403)、デバッグログかエージェントのフローのために、そのログは Developer 以上の役割の人にだけ表示されると言います。それまでは、トークンに read_api か api の権限が要ると言っていました。1.0.20 からは、ログを消去されたジョブを、ログの無いジョブでなく消去されたジョブとして出します。見るのは無料、再実行・取り消し・実行は Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GITLAB は GitLab Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitLab Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitLab のパイプラインやジョブの断り(400・403・409・429) · GitLab の「Insufficient permissions to set pipeline variables」 · GitLab の「insufficient_scope」 · GitLab の 401「invalid_token」 · GitLab の 404「Project Not Found」 · GitLab の 404「Group Not Found」 · GitLab のジョブが詰まった・時間切れで落とされた · GitLab 18.0 のあとの「This job does not have a trace.」 · JetBrains の IDE で GitLab のパイプラインを見る · English