This is part of the Patterns of Enterprise Deployment series.
An application to take the pre-built executable deployment package and dump it onto the target system in the correct state. The AutomatedDeployment may be as simple as a shell script to copy the binaries from your development machine to the test server; or, it might be consuming the output of a system that does a full clean build and migrates it onto the production server. This is somewhat different from an InstallerApplication as there is no interactive element and the emphasis is on rapidity and simplicity.
- automation means you can concentrate on something else, especially if it is time consuming
- a fair amount of upfront work
- slow to react to changes to the architecture of the system
- can be dangerous; manual changes take time to be destructive; a deployment script that goes awry can wreck servers in seconds
- there are several steps in the process of moving built executables to the running server
- you perform the deployment many times; you may be deploying to a test server 20 times a day
- When your project is changing so rapidly that you don’t know what it will produce
- if you haven’t tested the automation very well and the target environment is unstable (e.g., many target machines and many versions of OS or other people are also using manual deployments)
Coupled with a DeployFromSourceControl this is a good thing to have for agile developers who like to build the head of the trunk and stick if on the server. I also use it a lot when I’m working with a test server; i just want to grab the binaries that I just build and restart the service on the remote machine. It takes a few minutes to knock up a powershell script to do this, but it saves so much frustration and really, drag-n-drop is very slow! But, this really isn’t the same as a production quality script. If you have to use a script to deploy it is best if that is the only method to deploy the application; otherwise minor changes will creep in when people don’t follow the same pattern and the script won’t work properly. Worst case it will half-deploy and leave you with a system that you will have to recover by hand.