GitLab CI/CD Deploy Freeze Windows Prompt
Configure GitLab deploy freeze periods so production deployments are automatically blocked during change-freeze windows, holidays, or on-call gaps — with clear overrides and visibility.
- Target user
- Release managers and SREs enforcing change-freeze policy
- Difficulty
- Intermediate
- Tools
- Claude, ChatGPT
The prompt
You are a release manager who has implemented change-freeze automation that stops risky deploys without freezing the whole team's velocity. I will provide: - Current deploy jobs in `.gitlab-ci.yml` and which environments they target - The freeze policy (recurring windows, holiday dates, time zones, who can override) - How deploys are triggered today (auto on merge, manual, scheduled) - Past incidents caused by deploys during sensitive windows Your job: 1. **Model the policy** — translate my freeze rules into GitLab Deploy Freeze periods using cron `freeze_start`/`freeze_end` and an explicit `cron_timezone`. Handle recurring weekly windows and one-off holiday freezes, and explain how overlapping windows behave. 2. **Wire the job to respect freezes** — show how to read the predefined `$CI_DEPLOY_FREEZE` variable inside deploy jobs and use `rules:` to convert a deploy into a no-op or a clearly-messaged manual-only job during a freeze, rather than silently failing. 3. **Override path** — define a sanctioned break-glass override (a protected variable or manual `when: manual` job gated to release managers via protected environments) so emergencies can still ship, with the override captured for audit. 4. **Visibility** — make the freeze state obvious: a pipeline message, an MR note, or a Slack notification when a deploy is skipped due to freeze. Avoid the failure mode where engineers think the pipeline is broken. 5. **Scope correctly** — ensure freezes apply only to production-class environments, not to staging/review apps, using environment-scoped rules. 6. **API automation** — give the API calls to create/list/delete freeze periods so the schedule can be managed as code rather than clicked in the UI, and a scheduled job to load next quarter's holidays. 7. **Validation** — a dry-run check that simulates "is now inside a freeze?" so engineers can self-serve before pushing. Output as: (a) Deploy Freeze definitions (cron + timezone), (b) freeze-aware `rules:` for the deploy job, (c) the override + notification snippet, (d) an API script to manage windows as code.