With support for Sitecore 8.2 coming to an end 31st Dec 2019, several clients are planning their migration to Sitecore 9 if they have not done so already. This post describes the process and some of the tasks involved in upgrading from Sitecore 8x.
There are two main approaches when upgrading you might consider:
1. Upgrade existing instances – the upgrade is performed against the existing instances and rolled out to all environments.
- Additional infrastructure is not required for the upgrade
- Usually Requires a code freeze while the upgrade is rolled out to all environments.
- Unanticipated Issues can arise during the upgrade that can cause delays in the development lifecycle.
2. Clean Approach – setup a clean environment and clean Sitecore instances, migrate data.
- Upgraded and tested in isolation of the current production instance.
- Provides an opportunity to upgrade the OS & SQL.
- Easily rollback if issues occur.
- Code freeze to existing solution not required for the entire duration of the upgrade and bug fixes and new features can be rolled out and worked on in parallel to the upgrade.
- Additional Infrastructure is required for the new environments to run in parallel. We would need to spin up new servers to support the new environment as these would be running on different versions of the operating system and version of software to meeting the requirements of Sitecore 9.
- We will have the additional overhead of managing two sets of environments for a period of time while.
The clean approach effectively means you a Sitecore 8x environment – current site and a brand new Sitecore 9 environment – for the upgraded site.
Once you have switched over to 9 you can decommission the old environment.
High-level task overview
The following is a list of high-level tasks required to complete the upgrade process:
- 1 Provision new environments
- 2 Upgrade Solution.
- 3 Upgrade Sitecore Databases.
- 4 Upgrade xDB.
- 5 Refactor CI/CD.
- 6 Deploy to DevInt & Test.
- 7 Merge Features & bug fixes.
- 8 Deploy Upgrade to Stage.
- 9 Create Regression Test Script.
- 10 Regression Test Iteration.
- 11 Sign Off Upgrade on Stage.
- 12 Deploy Upgrade to Production.
- 13 Security Hardening.
- 14 Load Test Production.
- 15 Sign Off Production.
- 16 Go-Live Content Freeze on Production.
- 17 Go-Live Upgrade Production Databases.
- 18 Go-Live Upgrade xDB.
- 19 Go-live Smoke Test Production Database.
- 20 Go-Live Display Service Maintenance Page.
- 21 Go-Live Switch Upgraded Site Live GO-LIVE.
- 22 Remove content freeze.
- 23 Roll Back Plan.
- 24 Clean Up.
1. Provision New Environments
You will need to provision new environments for the Sitecore 9 instance to run in parallel to the existing Sitecore 8x environments during the upgrade and for a short period after go-live:
This is one of the benefits to this approach in that you getting a shiny new infrastructure running the latest compatible versions of OS & Software.
2. Upgrade Solution
You will need to upgrade the solution and any dependencies to work with Sitecore 9. This will involve but not limited to the following tasks:
- Install a vanilla Sitecore 9 instance.
- Create upgrade Branch.
- Upgrade Visual Studio to latest version.
- Upgrade to Net Framework 4.6.2 or later.
- Upgrade the any referenced Sitecore 8x packages to Sitecore 9.
- Upgrade Glass Mapper to the latest version.
- Upgrade TDS or Unicorn to the latest version.
- Upgrade any Sitecore Modules to the latest version for Sitecore 9x.
- Refactor any breaking changes.
- Refactor any Custom Sitecore UI change.
- Sitecore Patches – review every Sitecore patch installed to determine whether it is still required for Sitecore 9.
- Configuration – verify any configuration changes in solution are still valid and required for Sitecore 9.
- Upgrade Custom MongoDB facets for xDB.
- Test locally and resolve issues encountered.
3. Upgrade Sitecore Databases
Backup and restore production Databases to local developer Sandbox:
Following the Sitecore upgrade guide – Chapter 3:
- Run the necessary scripts to upgrade the databases.
- Install Sitecore upgrade package & any database scripts.
- Make sure the site runs and fix any issues caused by data.
- Document any lessons learned or steps taken to resolve issues encountered (this task will be repeated prior to go-live).
4. Migrate xDB
Sitecore 9 introduced a new data model for xDB, which means all data in your existing MongoDB must be converted to the new format.
Sitecore has provided the xDB migration Tool to upgrade your data. This is covered in Chapter 12 of the upgrade guide.
Step by Step instructions for configuring and using the migration tool and some common issues migrating xDB data can be found on my blog post: How to migrate your Sitecore 8x MongoDB contacts to xConnect.
This dry run will give you a good indication of the amount of time required to upgrade xDB when you repeat the process prior to go-live.
Note: This is required if you need to keep the existing MongoDB data. The amount of time it takes to run really depends on how much data you have in xDB it could take hours or even days to run.
5. CI/CD Changes
Depending on your existing CI/CD processes you most likely will have to make changes to accommodate the new Sitecore 9 environment. Ensure that you can deploy to both independently of each other.
6. Deploy Upgrade to DevInt & Test
Deploy the upgraded Solution and databases to the new DevInt environment. Smoke test and perform basic integration testing. Fix any environment-related issues.
7. Merge features & fixes
If you’ve not had the luxury of a complete code freeze prior to beginning the upgrade process then you will need to merge the existing developer branch into the upgrade branch. Ensuring new features or bug fixes in the existing dev branch are merged into the upgrade branch prior to testing of the upgraded version on Stage.
After this stage, you might want to consider a code freeze on the existing dev branch and only allow critical bugs to be fixed and merged into master and the upgrade branch.
8 Deploy Upgrade to Sitecore Stage Environment
Deploy the upgrade branch to the new Stage environment.
9 Create Regression Test Script
If they don’t already regression test scripts the QA team should define adequate regression test scripts to cover all the major functionality of the Site:
- Front End website Functionality.
- Content authors functionality.
- System Processes.
- Data Imports and/or any integration points.
10 Regression Test Iteration
The QA Team and Dev team will require sufficient time to run through a series of regression test and bug fix iterations on the stage environment.
The regression testing should be sufficient to cover all the major functionality of the application:
- Front End website functionality.
- Content authors functionality.
- System Processes.
- Integration Points.
Having the existing stage instance running in parallel helps with this stage as functionality can be easily compared between Sitecore 8x and Sitecore 9x.
Any issues identified should be prioritized, fixed, resolved and re-deployed.
Cycle through: Test->Resolve->Fix->Deploy->Test until Upgraded instance is stable for production.
11 Sign Off Upgrade on Stage
The QA manager and/or Product manager along with the lead architect should sign off the upgrade on the Stage environment as Ready for Production.
12 Deploy Upgrade to Production
Deploy Upgraded Solution to the new Production environment. Smoke test and perform some regression testing the Production Environment. Resolving any issues with the Production Environment.
In my experience, while stage environment and production are mirrors in terms of infrastructure this is not always the case. Especially integration points in production tend to be different than lower environments so it’s important these are tested.
13 Security Hardening Production
The Sitecore security hardening guide should be followed and applied to each appropriate Sitecore Instance Roles defined in your Architecture. You will probably also want to conduct penetration testing.
14 Load Test Production
You should conduct baseline, stress and soak tests against the production environment and compare the results with the Sitecore 8x production load test results. You will have to adapt the existing load test scripts for the new environment.
Remediate any issues with performance discovered.
If you don’t currently do some form of load testing then I recommend you read my series on load testing starting with Measuring performance under load.
15 Sign Off Production
Product manager sign off Production environment is ready for go-live.
16 Go-live Code Freeze
Prior to go-live, you will want to implement a code freeze on the existing master branch.
Any recent fixes or features since the last previous merge will need to be merged into the upgrade branch and deployed
17 Go-Live Content Freeze on Production
Initiate Complete Content Freeze on Production Sitecore 8x instance Prior to go-live of Sitecore 9. Now I appreciate this is not always possible and therefore content editing should at least be restricted to only a few content authors for critical changes. Any changes that are made during go-live will have to be reapplied on the upgraded instance. Either manually or packaging up the changes.
18 Go-Live Upgrade Production Databases
Backup and restore the Production Sitecore Databases to the new Production Environment SQL Instance.
Repeat step 3 to upgrade the Production databases.
Apply the lessons learned during the initial upgrade.
19 Go-Live Upgrade Production xDB
This allows us to capture analytics data deltas that have occurred since we started the process.
Note: Having already ran through this process once you should be able to apply any lessons learned without any unexpected surprises. You will also have a better idea of the time it will take.
20 Go-live Smoke Test Production
Smoke test the upgrade production environment to ensuring the upgrade was successful.
21 Go-Live Switch Upgraded Site Live
You might want to put in place a maintenance page on the existing Sitecore 8x while traffic is transferred over to the new environment.
22 Remove content freeze
If the site is performing as expected then remove the content freeze and all content authors back on the site.
23 Roll Back Plan
If there is an issue when we switch over to the upgrade site and there are issues that cannot be resolved quickly and it is detrimental to the business and end-user experience we can revert back to the old environment.
I recommend agreeing ahead of go-live two important timelines:
- the point of no return, i.e. the time after go-live when reverting back to the Sitecore 8x is no longer an option.
- the point we must revert i.e. if there are issues after go-live depending on the nature of the issues you might allow a window of time for the team to attempt to resolve before you consider rollback.
It is better to have agreed on these ahead of go-live and everyone is aware of these going into the process. If there are any issues after go-live tensions can be running high in those scenarios which can make time-critical decisions challenging.
24 Clean Up
After a suitable period of the new Sitecore 9 instance running remove the old Sitecore environments if they are no longer required.
- How to Migrate your Sitecore 8.x MongoDB Contacts to xConnect
- Sitecore 9 Hardware & Software Requirements
- Sitecore xDB Data Migration Tool
- Sitecore 9 Architecture Overview
- Sitecore 9 Scaling Scenarios