I was evaluating Redgate Deployment Manager in order to try automate our organisation's deployment process but due to the architecture of the organisation's applications I am not sure how to set it up.

Our organisation runs sort of a single tenant architecture whereby each client has a copy of our two applications in their respective folder and their own database instance. Our current process is to extract manually the updated files from zip files and apply them to each client folder. This is very time consuming since we have a large number of clients and the number is always increasing.

We setup environments to deploy against our Development, Testing, Staging and Production environments. How would we go about setting up a client on the deployment manager? We would setup a project for both our applications but how will we push the releases to each client folder/website?

1) create a "step" for each client. You can then configure the variable scope to be per-step to deploy to the folder/website you want for that client. The main issue here is that currently you cannot name the steps, and assuming you use the same package source for all clients, all the steps would be named identically, making it a little harder to know which step related to which client (you'd need to go off the step number as opposed to name)

2) add the same agent to the client multiple times, naming each instance for the client. You can then do the same as 1) but scope the variables to the "machine" rather than the step.

Thank you for your reply, I used your second option whereby added multiple target machines (named per client) against the same agent (web server). After adding the target machines, I setup the Project Variables by utilising the "RedGatePackageDirectoryPath" and "RedGateNotAWebSite" and set them to the clients application folder and "True" respectively (two project variables per client).

Each project variable is set to run against the specified client (Target Machine), one issue/query which I had was how to specify which clients to run the release against in case I did not wish to run the release against all clients. There were two ways I could have achieved this:

1) Before deploying the release, excluding the clients (target machines) from the Project Step

2) Removing the Project Variables for clients which were not going to be updated

I found the first option more clean and also it is easier to just exclude target machines and re-adding them at a later stage rather than removing the project variables and having to setup all the paths again.

I would like your thoughts about the above to see if there was another possible or cleaner solution, till now the Deployment Manager seems to be promising after having overcome this obstacle.