Migrating from Octopus Deploy to Azure Dev Ops
To become more operationally efficient, our team recently made the decision to migrate deployment pipelines from Octopus Deploy to Azure DevOps. This move aimed to consolidate our existing live pipelines under a unified tool, while also optimising costs and infrastructure.
Octopus Deploy, a self-hosted solution, brought with it license, infrastructure, and support costs. Transitioning to Azure DevOps, a hosted service backed by Microsoft Azure, enabled us to get rid of these additional expenses, paving the way for more streamlined operations.
Whilst there are still costs associated with Azure DevOps, the time and effort for the client to maintain their own deployment as well as the knowledge required is removed which has huge long term benefits.
Some of the key benefits of the migration to Azure DevOps were:
- Single bill to pay
- Easier user management
- Aligned technology across all projects
- More opportunities for sharing work across project
Initial Discovery
The first step was gaining access to Octopus Deploy, a hosted solution with no public access. This required setting up VPN access — a minor but necessary step for a self-hosted solution. We delved into a thorough review of existing pipelines, dissecting code and variables to glean insights for our migration to Azure DevOps.
Octopus Deploy orchestrated deployments across six distinct environments:
- Prd - Production
- Pre – Pre-production
- Dev - Development
- Snd - Sandbox
- Sndperf - Sandbox Performance
- Sndstatic - Sandbox Static
For each of the environments we needed to extract the relevant variables used by the pipelines. These variables became the basis for our Azure DevOps pipelines and ensured we had consistency across both tools – key during a migration of this type.
Azure DevOps Integration:
As we identified the values in Octopus Deploy, we needed to then establish if these existed already in Azure DevOps as part of other BAU work. Those that didn’t exist were added, compared and peer reviewed to ensure we didn’t miss anything and everything we added was accurate.
As we progressed through each Octopus pipeline, we began to build a bigger clearer picture in Azure DevOps of what already existed in Octopus, forming part of the actual migration.
This process ensured a uniform set of values across both tools as well as allowing us to learn what the pipelines did, ensuring successful testing and validation later in the project.
Testing
Testing posed a unique challenge — running pipelines could have real-world consequences in actual environments. Collaborating closely with our client, we earmarked a testing window in Pre-production. This enabled us to identify and rectify any issues in a lower risk setting before moving on to Production.
Whilst Preproduction isn’t the lowest environment, it was the most like-for-like environment to Production, adding a level of confidence to the overall migration and trust in the new pipelines.
Pre-Deployment
We scheduled our first test into Preproduction for 2pm mid-week to ensure all teams were available to help in case any issues arose during the testing. We encountered some initial issues tied to Azure DevOps permissions (unrelated to our migration work) but this was resolved swiftly and retested to ensure a successful outcome.
This trial & error approach isn’t always ideal where delicate systems are involved, but thankfully this project allowed us some freedom which made it easier to migrate the pipelines with minimal concerns.
PRD Planning and Deployment
The lessons learnt in pre-prodition pre-empted any issues with Production. This is a great example of what non-production environments should be used for and it proved vital for our migration.
Though the Production release went well, two minor access-related glitches surfaced. These issues, absent in Pre-Production, were promptly addressed thanks to a well-coordinated deployment team.
Conclusion
In conclusion, the migration from Octopus Deploy to Azure DevOps was successful and delivered within the established timeline. We received positive feedback from the client and the seamless deployment across multiple environments validated the approach we took.
As with any project, there were some key learnings to take away. I learned that testing is vitally important, especially in migrations. Rigorous pre-Production testing spared our client any unforeseen downtime — an outcome we always strive for!