I’m looking for some advice on how to model a deployment process for one of my team’s product.
We have a need to deploy more than one copy of the product based on different build configurations. It’s not a .NET based product, but it is as if we had to deploy one copy built on .NET Framework and another copy based on .NET Core. The deployment process is identical for both configurations except for a few variables. The code is the same, it’s just built differently. Whenever I deploy a version for one configuration I also need to deploy the same version for the other config.
Right now I’m trying to use Channels for this and scoping some variables to the channel. The build server (TeamCity) builds different packages with similar names (Product.ConfigA.1.0.0.zip / Product.ConfigB.1.0.0.zip) and the deploy package step selects the package according to the channel being deployed to.
It’s kinda working but it feels like I’m abusing the system. For one thing I have to deploy do production twice. My understanding is that channels is focused more on “the last deployment is the live product” scenario, rather than each channel being an active release pipeline and all of them active at once.
Can you suggest any improvements based on the needs? What I’ve considered so far:
- continue using channels despite them feeling a little weird on this scenario;
- duplicate the project once for each build configuration and keeping them completely separate. I don’t expect the process to change often so this might be OK;
- have one project and one default channel but duplicate some steps in the deployment process, so that when the deployment runs it actually deploys more than one package.
- use the multi-tenant feature. Is this just me trying to abuse the system again?
On the TeamCity side of things I’m using a Build Configuration Template and then creating the actual build configurations based on those templates. Some kind of deployment template might also work for me if there is something similar in Octopus.