What's New in Octopus 3.4: Multi-tenant Deployments
Continuing with the theme from the last blog post, I'm taking a step back and giving an overview of the new multi-tenant deployments feature set. Multi-tenant deployments is an advanced feature that adds a whole new dimension to the Octopus deployment experience, but we worked hard to make it approachable! Read on to learn more. :)
Why should I care about multi-tenant deployments?
If you ever wanted to have multiple instances of your project deployed to each environment, you should consider multi-tenant deployments in Octopus Deploy. For example:
- you want multiple isolated deployments in your Test/QA/UAT environment
- you want to provide each tester with an isolated test deployment
- you want to provide isolated deployments for work on feature branches
- you want to manage deployments to individual targets across environments, like managing a fleet of embedded devices, or a fleet of laptops/workstations
- you want to deploy your project to another customer
- you want to turn your project into a SaaS application
Paul Stovell recently recorded an episode of .NET Rocks talking about Building Multi-Tenant Applications. It's a great listen to get a better understanding of why you would want to build multi-tenant applications and the considerations that go into their design and deployment. It's a highly recommended podcast!
- Feature Toggle
- First Class Tenants
- Variable Templates
- Tenant Tag Sets
- Tenant Designer/Preview
- Tenanted Deployments
One of the most important features of multi-tenant deployments is that it was intentionally designed as an additive thing. In other words, if you don't need it, you shouldn't notice anything has changed. This is controlled by a feature toggle in the Octopus Features configuration screen.
It's also important to note that if you enable multi-tenant deployments that you can continue to deploy your existing projects happily until you decide to connect tenants to them. If you connect a project to one or more tenants, you can still deploy them through environments as you do today. We call this un-tenanted deployments.
Lastly, you have full control over how a project supports multi-tenant deployments ranging from disabling it to requiring a tenant to deploy.
Tenants in Octopus are a first class citizen. They enable you to deploy a project to one or more tenants in the same environment. You create and manage their details in the Tenants screen and we've update the deployment experience through projects and environments to support the tenant concept.
Variable templates allow you to specify which variables are required to successfully deploy a project to a tenant. They can be defined on a project or a library variable set and we interpret them in a slightly different way depending on where they are defined.
Defining a variable template in a project means the variable can have a different value for each environment the tenant is connected to. This is a great way to manage technical settings like a database connection string or other environment-specific details.
Defining a variable template in the library means the variable will have a constant value for that tenant, regardless of project and environment. Tenant specific library variable template values are managed on the tenant page under the 'Common Variables' tab.
Tenant tags help you to classify your tenants using custom tags to tailor tenanted deployments for your projects and environments. Tenant tags are defined within a tag set to group similar tags together. Project Steps, Channels, Variables, Machines, Accounts and more can be scoped to tags. This enables you to work with groups of tenants rather than individually. For example, you could deploy the latest release to all tenants with the
Tenant Important/VIP tag. Tenant tag sets can be managed in the Library Tenant Tag Set screen.
Some teams might have a handful of tenants while others might have thousands. With this in mind, we built a tenant selection designer/preview tool to make it easy to find the right tenants whenever you need them throughout Octopus. You can find specific tenants by their name, filter tenants by tagset/tags and further search the resultant tenants.
Bringing all of these features together enables tenant deployments. Deploying a release to tenants builds upon the core Octopus deployment experience by enhancing it to support tenant selection of one or more tenants and then deploy them to an environment.
The Octopus dashboard now includes a tenant count to show you how many tenants have the latest release in an environment. This can be further customised to filter for specific tenants or tag/tagset values.
The default project overview dashboard lets you see which releases have been deploy to which environments and tenants at a glance. Better yet, the dashboard can now be filtered and grouped to see only the relevant information you need.
Multi-tenant deployments is an advanced feature but it was also our top voted user voice suggestion. We loved the feedback we received from our community as we built it and we can't wait to ship it. For more information, please see the multi-tenant deployments guide.