Release Management on Heroku
Posted by Adam
When a team of developers uses continous deployment to deploy to their Heroku staging and production apps multiple times per day, having a record of what was deployed and when can be very valuable. This is especially true when bad code gets deployed: being able to recover quickly from failure is a key part of any agile process.
Today, Heroku is announcing our release management add-on. When installed on an app, every code deploy is recorded in a ledger with information about who deployed, when, and what commit hash. And it’s not just code: anything that changes the app environment, such as adding or removing add-ons or changing config vars, creates an entry in the release ledger. It looks like this:
$ heroku releases Rel Change By When ---- ------------------- ---------- ---------- v17 Deploy 38a0f41 firstname.lastname@example.org 7 minutes ago v16 Config add API_URL email@example.com 31 minutes ago v15 Maintenance off firstname.lastname@example.org 6 hours ago
The audit trail for deploys is useful information, and you can use a releases:info command to zoom in and get exact details for each release. But what’s even better is being able to roll back from bad deploys, like a giant undo button for your app.
$ heroku rollback Rolled back to v16
The rollback command restores the previous release (or any release that you specify). Rollbacks are a very quick operation, because unlike pushing up new code, your slug doesn’t need to be recompiled. This is particularly significant for large apps with many gem dependencies.
Release management isn’t terribly important for small apps; but for large production apps with many developers, frequent pushes, and lots of code, it’s vital. The basic release management add-on (two levels of release history, one level rollback) is free; the advanced add-on (unlimited history and rollbacks) will be premium priced.
Read the docs, then give it a spin and let us know how it works for you.
This is the second in a series of new features targeted at large production applications (the first being support for larger databases). More features in this vein are coming soon!