Jez Humble, who wrote the book on continuous delivery, believes deployments should be boring. I totally agree; it's one of the biggest reasons I like working with Microsoft Azure.
Occasionally, however, deploying software is not at all boring. Today, for example.
Because Microsoft has ended support for Windows Server 2008 as of next week, I've upgraded an old application that I first released to Azure in August 2012. Well, actually, I updated it back in March, so I could get ahead of the game, and the boring deployment turned horrifying when half of my client's customers couldn't use the application because the OS upgrade broke their Windows XP/IE8 user experience. Seriously.
All of my client's customers have now upgraded to Chrome, IE11, or Firefox, and I've tested the app on all three browsers. Everything works. But now I have to redeploy the upgrade, and I've got a real feeling of being once-bitten.
The hard part, the part that makes this a one-way upgrade, is a significant change to the database schema. All the application's lookup lists, event logging, auditing, and a few other data structures, are incompatible with the current Production version. Even if there weren't an OS upgrade involved, the database changes are overdue, so there is no going back after this.
Here are the steps that I will take for this deployment:
- Copy current Production database to new MigrationTest database
- Upgrade MigrationTest database
- Verify Test settings, connection strings, and storage keys
- Deploy Web project to Test instance (production slot)
- Validate Test instance
- Deploy Worker project to Test instance (production slot)
- Validate Worker instance
- Shut down Production instance
- Back up Production database to bacpac
- Copy Production database within SQL instance
- Upgrade Production database
- Verify Production settings, connection strings, and storage keys
- Deploy solution to Production instance (staging slot)
- Validate Production Web instance
- Validate Production Worker instance
- VIP swap to Production
Step 1 is already complete. Step 2 will be delayed for a moment while I apply a patch to Visual Studio over my painfully-slow internet connection (thanks, AT&T!). And I expect to be done with all of this in time for Game of Thrones.