A few weeks ago, we had to move from an IBMCloud account to another , the cause was some enterprise constraints , you know the movie 🤷♂ .
As IBMCloud doesn’t provide tools out of the box for it, our migration was based on our daily CI/CD pipeline! Wow 🤦♂
Now, let's see what we need to move to the new Cloud:
➡️ 30 CloudFoundry
➡️ 10 PostgreSql
➡️ 2 MongoDB
➡️ 3 AppID (OPIDC)
➡️ 4 domain names
Okey 49 assets to move, seems good.
Now we have seen the most asset we have, the idea is to use CI/CD pipelines for most of our deployments.
So, what's about our application’s pipeline:
- ✅ Some applications are deployed with GitlabCI pipeline => should be OK
- ❌ Some applications are deployed with IBMCloud Devops pipeline => which is not cloud agnostic
- ❌ No Infrastructure as code for BDD, AppId ...etc. => Hmm manually provisioning ?
- ✅ Data migration? all our assets have an API for import/export => it's should be OK.
We have some bad and good thinks, moving all that stuff with a minimal down want be the best way , so without too much thinking
💡 Blue Green deployment is the best way
More about blue green deployment from Martin Fowler here
The Gif below describe in visual way how we proceed:
The process can be splitted to 6 steps describes as below:
Step 1 - unifying our deployment Pipeline by moving all our CI/CD pipeline to GitlabCI.
Step 2 - Move all non-production assets . As we are working in an agile mode we move the dev environment first then, when needed, staging , sandbox
Step 3 - Move the production assets, then data migration, then push the provisional production URL to the Business analyst / Product Owner for a Go/No GO
Step 4 - Once we have the GO -> Migrate the domain name from the legacy cloud to the New IBMCloud
Step 5 - Remove the death pipeline code , and remove the old assets from legacy Cloud
Step 6 Celebrate with the Team. 🎊 🎉🎊 🎉
So, without going too deep into details of every step , this how we do the work .
In the end, it's been not easy, and having a devops culture helps a lot and i can resume what we have learn :
1- we have to be cloud agnostic:
A toolchain must be a cloud agnostic. If we want a change our
deployment strategy, it must me smooth.
2 - Devops culture is a must
The pipeline source must be versioned, involved with the code source. The dev Team is the owner of the pipeline
3 - Start Easy
Dev environment first, as we work on agile , the other environments will be deployed in an iterative and incremental way
4 - If it’s hard manually, then script it .
Special attention to the Data migration for every type of asset. ( AppId , SQL , NoSql , Cloud object Storage …etc )
That's all folks, and how will you do in the same situation ?