HerokuBernerd SchaeferProblem & solution
Automated Continuous Deployment at Heroku
Summary
Heroku’s Runtime team replaced a manual, coordination-heavy deployment process after team growth and Common Runtime sharding expanded work from one infrequently changed application in two environments to multiple services across 12 environments. Existing Heroku Pipelines deploy merged, CI-passing changes to staging, while the Go-based cedar-service-deployer reconciles differences between pipeline stages and promotes them when a series of safety checks pass. Those checks include a 30-minute age gate, deployment and incident controls, master-branch verification, Librato alerts, and HTTP 200 checks for configured URLs, including platform integration tests. The stateless system can handle concurrent rollouts, and the team added practices such as isolated early stages, feature flags, and separated database-migration changes. After about two years, it managed 23 services, allowing engineers to merge and rely on healthy systems for global release.
Context
The previous deployment workflow was manual, repetitive, and coordination-heavy. Team growth from a handful of engineers to more than 30, combined with Common Runtime sharding and service decomposition, increased deployment activity across multiple services and 12 environments, making the existing process unsustainable.
Approach / What changed
Heroku Pipelines automatically deploy merged, CI-passing changes to staging. A Go tool named cedar-service-deployer periodically compares pipeline stages and promotes changes after checks for age, permissions, master-branch presence, incidents, Librato alerts, and configured URL responses pass. The stateless tool repeatedly reconciles stage differences and supports concurrent rollouts.
Takeaways
The age gate keeps a change in staging for 30 minutes before promotion, allowing integration tests to run and potential alerts to appear.
The deployer pauses promotions for open relevant incidents, firing Librato alerts, global or service-specific deployment pauses, and changes that are not present on master.
Automated deployment increased reliance on alarms and platform integration tests, while feature flags and separated database-migration changes helped keep master continuously deployable.
Source and freshness
- Source
- heroku.com
- Published
- Added to Yomu
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.