Why does CI stipulate that we should be able to rollback to any version of a software?

I was reading the book “Continuous delivery, reliable software deployments through build, tests and deployment automation “. And the author mentions that one should be able to rollback to any version of a software with one click.

  1. I am wondering if this is really useful, and especially in the following scenarios :

    • You are working on web projects. Sounds to me that in this case, you don’t really need the ability to rollback to any previous version. Being able to rollback the current release should be enough. Once it’s deployed and working, why would you ever want to go back to a previous version ?

    • And actually this argument holds true if you are working on desktop applications.

    Perhaps I misunderstood what he means by “being able to rollback to any version”.

  2. Does he mean the production environment or the development environment ? If it’s the later that would make more sense – even if I still find it kind of unecessary for the web, source control branching should do the trick for desktop applications.

  3. And still if it’s the later, do you think that using tools like Entity Framework Code First Migration that allow you to recreate the database from the source code is enough to say that we have reach this standard ? Because then, with source control, we’d even have the referential data that need to be seeded for this particular version after the database is created.

3

In short:

  1. Since you don’t know whether a build contains a critical bug at the time of deployment, you may need to roll back more than one version when you’re deploying at a relatively high frequency. If your setup doesn’t allow you to do so, your only alternative is to roll forward as quickly as you can.

  2. As soon as you have an application that has 3rd party dependencies (say an API) or storage (say a database with schema), rolling back may be a lot harder than just deploying the same bits again. Source control is not enough, your schema needs to be reselient. You may need to build forward and backward compatibility into the design of your code and database schema to be able to pull that off.

  3. Code First Migrations will allow you to easily move forward, but it doesn’t fix your schema if you accidentally delete a vital column, or populate a default value with the wrong value or something else that may happen during a migration. being able to roll back would mean being able to restore the accidental changes, while retaining important (business) data. Patterns like CQRS provide you with a form of record and playback of changes, which will allow you to reconstruct the data in it’s original form if needed.

Your interpretation probably holds when you’re able to take down the site/application, back it up, install the new version, test it (can you absolutely be certain you did not introduce a critical bug?) and see that it works. If you want to take a step forward, do rolling deployments, canary builds/releases, dark launching, live failovers and other advanced deployment techniques, you need to take a step back and take in the whole picture.


Say you have Continuous Integration and you want to deploy every build when it passes all tests, you may already be 2 or 3 deployments ahead when you may find a critical defect which you weren’t testing for.

If you can only go back one deployment, you’re stuck and will have to fix the defect and roll forward. This puts a number of demands on your ability to come up, test and distribute a patch in short order.

If you’re able to turn back to the last known good build, you’re in much safer water.

You’ll see that teams who have the ability to roll over at any point int time, will be less strict about this rule, than teams who need the ability to roll back.

6

Being able to rollback to the current version is a different way of saying “rollback to the previous version”, now to do that you have 2 ways of doing this:

  • You can simply make a copy of the current version before deployment, and if anything goes wrong, just replace the new version with the backup copy.
  • You can create a system where you can deploy any version at all, so deploying a new release means running the deploy task with the newer version, and rolling back is just the same process – only you specify the previous version.

The 2nd way is obviously more work, but it is far superior – it is the “right” way of doing this. You shift the problem of rolling back to one of deployment, so you do not need special work to make the backup and re-deploy the backup. Saving yourself this extra work means you can spend it on creating the correct deployment mechanism – which you have to do anyway as its what you use for deployment of new versions!

So, setting up your CI system to deploy is easier, better and also lets you deploy very old versions for free. In some businesses this is essential as you may be called upon to debug a problem a customer has in their version – so you’ll need a way to re-create the version they are running. You may not need this for your single-deployment website so you aren’t seeing what the benefit might be, but trust me – its very real.

Set up your CI system like this and you’ll be set for the future, and any future roles you may have where you do need a fully working CI system, you’ll have experience setting it up correctly.

“Once it’s deployed and working, why would you ever want to go back to a previous version ?” The key words here being “and working”. In a perfect world, every new version would be thoroughly tested and completely accurate before it is deployed. But in real life, that doesn’t always happen. What if you discover a critical bug that was introduced, not in the current version, but in the previous version? You many need to roll back two versions. Lots of applications these days, especially web sites, have a fairly high deployment rate. If you’re putting out a new release every day, it wouldn’t be shocking if a bug that was introduced three days ago wasn’t discovered until today.

Even with a relatively slow release schedule, bugs could go undetected for a long period of time. Like many applications have “year end reporting”. If we released a new version in January that created a bug in the year end reporting, it might go unnoticed for almost a year. (Whether rolling back a year’s worth of releases is a practical solution, well, depends on the nature of the app and how much it is changing. Presumably any rollback is temporary, just until you get the current version fixed and can redeploy.)

1

Never mind the current deployment, if you (or your customers) run a previous version you may need to get a snapshot of that version going to reproduce an issue for an incident or compare current undesirable behaviour to a previous build. That includes not just the application, but test data, and test details as well.

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật