I work for a consultancy that develops custom software for a large number of clients. Production environments vary from client to client; for example one client may have a single server running WIN2008R2 and .NET4.0 that acts as web server, application server and database server; another client may have multiple servers running WIN2003 and .NET2.0.
For each project we typically have a system testing environment, a UAT environment, and a production environment.
What is the best way to manage these environments in Octopus Deploy? Should I create system testing, UAT and production environments for each project and apply an appropriate naming convention to distinguish between them? For example, Project1TEST, Project1UAT, Project1PROD; Project2TEST, Project2UAT, Project2PROD, etc? If so, presumably the config transforms will need to also be named appropriately, for example web.Project1TEST.config etc, is that correct?
The configuration is generally up to you. You could do this:
Environments: Project1Test, Project1UAT, Project2Test, Project2UAT
Projects: Project1, Project2
You could then use Project Groups to choose which environments apply to which set of projects, keeping your dashboard clean.
Another option is to use simply Test, UAT, Prod environments, but to prefix the roles of each machine in the environments with the client. For example:
Machine 1 [project1-web-server]
Machine 2 [project1-app-server]
Then when you define your deployment steps for project 1, just choose those roles.
If you’ll ever use the same machine for serving multiple clients this might be a good way to go (since the machine could have both roles). If not, the first approach may be better.
Thanks for your reply. I think your second suggestion (prefixing role names) is the best solution for us. I actually started playing around with that last night and it seems to be working really well.