Skip to content

Disabling GitLab CI/CD hides CI/CD Variables

TL;DR

Turning the project's CI/CD feature off (builds_access_level: disabled) also hides the Settings → CI/CD → Variables page. The variables aren't deleted — they're just inaccessible (the API returns 403) until CI/CD is re-enabled.

Symptom

The CI/CD → Variables section is missing for this project, while other projects show it. Trying to read variables via the API fails:

$ glab api "projects/ai71.ai%2Fdevops%2Fedge-devops/variables"
{"message":"403 Forbidden"}

Cause

The whole CI/CD feature is controlled by one project setting, builds_access_level:

Value Pipelines run CI/CD menu + Variables
enabled yes visible
private yes visible to project members only
disabled no hidden (UI gone, API 403)

When pipelines were disabled project-wide (to stop them running during a migration), builds_access_level was set to disabled — which also removed the Variables page. GitLab has no "variables visible but pipelines off" mode; Variables are part of CI/CD.

Resolution

Re-enable CI/CD.

Settings → General → Visibility, project features, permissions → CI/CD → set to Enabled, then Save changes. The Settings → CI/CD → Variables page returns.

glab api --method PUT "projects/ai71.ai%2Fdevops%2Fedge-devops" \
  -f builds_access_level=enabled

Verify:

glab api "projects/ai71.ai%2Fdevops%2Fedge-devops" \
  | python3 -c "import json,sys;p=json.load(sys.stdin);print(p['builds_access_level'], p['jobs_enabled'])"
# -> enabled True

Side effect of re-enabling

Pipelines resume on push and merge requests. In this repo the fmt / validate / plan jobs run automatically (read-only) and every terraform apply job is when: manual, so nothing deploys without an explicit click.

References