GitLab の「Insufficient permissions to set pipeline variables」
パイプライン変数は、パイプラインを始めるときに付ける変数です。Run pipeline の画面、パイプラインやトリガーの API、パイプラインのスケジュール、プッシュのオプション、ほかのプロジェクトのパイプラインを始めるトリガージョブで付けます。GitLab 17.1 から、プロジェクトは Settings > CI/CD > Variables > Minimum role to use pipeline variables で、これを使える役割を絞れます(GitLab の説明)。その役割に届かない人が変数を付けて新しいパイプラインを始めると断られます(和訳:パイプライン変数を設定する権限がありません)。以下はすべて GitLab のソース(lib/gitlab/ci/pipeline/chain/build/associations.rb・app/services/ci/play_build_service.rb・app/models/project_ci_cd_setting.rb)を 2026年10月24日に読んで確かめたものです:
HTTP/1.1 400 Bad Request
{"message":{"base":["Insufficient permissions to set pipeline variables"]}}
設定の値
no_one_allowed:どのパイプラインもパイプライン変数を使えません。gitlab.com では GitLab 17.7 から、新しい名前空間の新しいプロジェクトの既定です。ソースでは、新しいプロジェクトは最上位のグループの既定を受け継ぎます。owner:Owner の役割だけ。maintainer:Maintainer か Owner。GitLab Self-Managed と GitLab Dedicated で何も決めていないときの既定です。developer:Developer 以上、つまりパイプラインを始められる人全員です。- ソースでは、インスタンスの管理者はいつでも使えます。
この設定は、プロジェクトやグループの CI/CD 変数と、.gitlab-ci.yml の variables には関係しません。同じプロジェクトの子パイプラインも絞られません。
どこで出るか
- 新しいパイプライン(
POST /projects/:id/pipelineにvariables):上の 400 です。GitLab はブランチかタグがあるかを確かめた後、.gitlab-ci.ymlを読む前にこれを確かめるので、rules の文が先に出ることはありません。GitLab 自身の Run pipeline の画面は、使えない人には変数の欄を出さないので、変数を送りません。 - トリガーの API:トリガートークンの持ち主が使えなければ、同じ文で断られます。GitLab が自分で付ける
TRIGGER_PAYLOADだけなら通ります。 - 変数を付けた手動ジョブ(
POST /projects/:id/jobs/:job_id/playにjob_variables_attributes):理由の付かない{"message":"403 Forbidden"}です。ジョブを実行すること自体が許されていないときと同じ答えなので、変数のせいだとはわかりません。変数を付けなければ、同じジョブが動きます。GitLab のジョブのページも、使えない人には変数の欄を出しません。 - ほかのプロジェクトを始めるトリガージョブ:
downstream pipeline can not be created, Insufficient permissions to set pipeline variablesで失敗します。数えるのは、このプロジェクトではなく下流のプロジェクトでのあなたの役割です。トリガージョブは、inherit:variables: falseが無ければ最上位のvariablesも渡します(GitLab のトラブルシューティング)。
直し方
- 変数を付けずに始める。GitLab は 17.7 から、パイプライン変数の代わりにパイプラインの inputs を勧めています。
- 設定を相談する:変えられるのは Maintainer です。
ownerかno_one_allowedになった後は、Owner だけが変えられます。 - 手動ジョブの 403:変数を付けずに実行する。それでも断られるなら、原因は役割か保護されたブランチです。GitLab がジョブを断った理由へ。
- トリガージョブ:
variablesを外すか、inherit:variables: falseを足すか、下流のプロジェクトでの役割を上げてもらう。
IntelliJ IDEA で GitLab のパイプラインを見るなら
Lesstep の Pipeline Inbox for GitLab CI は、JetBrains IDE(2024.1 以降)のプラグインです。GitLab のプロジェクトのパイプラインをジョブとログといっしょに一覧にし、Pro では新しいパイプラインと手動ジョブを変数付きで始められます。Run Pipeline のダイアログは、GitLab 自身の画面と同じく .gitlab-ci.yml が勧める変数を埋めておき、GitLab に断られたときは GitLab の理由を出したまま閉じません。1.0.17 からは、あなたの役割がパイプライン変数を使えないところでは、GitLab 自身の画面と同じく、勧められた変数のうち変えていないものを外してパイプラインを始めます(値は .gitlab-ci.yml から入ります)。変えたときや、手動ジョブに変数を付けたときは、Minimum role to use pipeline variables の設定の名前を出します。それまでは勧められた変数をそのまま送っていたので、変数を全部消すまで断られていました。見るのは無料、再実行・取り消し・実行は Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GITLAB は GitLab Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitLab Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitLab のパイプラインやジョブの断り(400・403・409・429) · GitLab のジョブのログの断り(403・404) · GitLab の「insufficient_scope」 · GitLab の 401「invalid_token」 · GitLab の 404「Group Not Found」 · JetBrains の IDE で GitLab のパイプラインを見る · English