Release Management on Heroku

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        julie@example.com   7 minutes ago
v16   Config add API_URL    steve@example.com   31 minutes ago
v15   Maintenance off       joe@example.com     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!

Browse the blog archives or subscribe to the full-text feed.