Overview
Why Use Environment Progression?
Environment progression rules help you:- Enforce deployment order - Prevent skipping environments in your pipeline
- Catch issues early - Problems surface in lower environments first
- Build confidence - Each environment validates before the next
- Meet compliance - Satisfy audit requirements for change promotion
Configuration
- Terraform
- API
Properties
CEL expression or selector matching the prerequisite environment(s). The
release must be successfully deployed to environments matching this selector
before proceeding.
Percentage of targets in the prerequisite environment that must succeed
(0-100). Use a lower value if some targets are expected to be unavailable.
Job statuses considered successful. Defaults to
["successful"].Minutes to wait after the dependency succeeds before allowing progression. Use
this to ensure the release has time to stabilize.
Maximum age (in hours) of the dependency deployment. If the prerequisite
deployment is older than this, progression is blocked until redeployed.
How It Works
- Find dependency environments - Ctrlplane finds all environments matching the selector that share at least one system with the current environment. This prevents cross-system dependency issues.
- Evaluate pass rate - For each dependency environment, Ctrlplane checks if the success percentage of release targets meets the threshold.
- Check soak time - If
minimumSoakTimeMinutesis configured, Ctrlplane verifies that enough time has elapsed since the most recent successful job. - Check freshness - If
maximumAgeHoursis configured, Ctrlplane ensures the dependency deployment is not too old. - OR logic across environments - If the selector matches multiple environments, the rule passes if at least one of them satisfies all criteria.
Common Patterns
Simple Linear Progression
Enforce QA → Staging → Production order:- Terraform
- API
Soak Time Requirements
Require the release to “soak” in staging before production:- Terraform
- API
Freshness Requirements
Block promotion if the staging deployment is too old:- Terraform
- API
Partial Success Threshold
Allow promotion when most (not all) targets succeed:Complete Pipeline with All Options
Full-featured production gate:- Terraform
- API
Progression Lifecycle
1. Version Created
A new deployment version is created and ready for release.2. Lower Environment Deployment
The version is deployed to the prerequisite environment (e.g., QA).3. Success Evaluation
Ctrlplane evaluates if the deployment meets success criteria:- Job status matches
successStatuses - Success percentage meets
minimumSuccessPercentage
4. Soak Time (if configured)
IfminimumSoakTimeMinutes is set, the clock starts after success.
5. Progression Allowed
Once all criteria are met, the version can proceed to the next environment.Best Practices
Timing Guidelines
| Transition | Soak Time | Max Age | Notes |
|---|---|---|---|
| Dev → QA | 0 | - | Fast iteration |
| QA → Staging | 0-15 min | 24h | Quick validation |
| Staging → Production | 30-60 min | 48h | Thorough soak |
| Critical services | 2-4 hours | 24h | Extended observation |
Recommendations
- ✅ Start with simple progression, add soak time later
- ✅ Use
maximumAgeHoursto prevent stale promotions - ✅ Combine with verification for automated quality gates
- ✅ Use lower
minimumSuccessPercentagefor environments with flaky tests - ✅ Document your progression requirements for the team
Next Steps
- Policies Overview - Learn about policy structure
- Gradual Rollouts - Control deployment pace
- Deployment Dependency - Cross-deployment gates