As mentioned in previous answers, this of course can be done with scripts. But, if you're going to be doing many and frequent deployments, on many servers, where there are small changes between each deployment, then scripting won't scale and can not be managed. It will become almost impossible to add tier dependencies to your scripts, and user management (who can run what and on what servers/environments) will become a nightmare.
There are a few commercial companies that are attacking this problem (called Application Service Automation). For Java there's Phurnace, what was recently acquired by BMC. If you're in the cloud, there's R Path. For physical, virtual, and cloud environments (even combined) there's Nolio. They have a free version at http://www.nomorescripts.com, and more information can be found at http://www.noliosoft.com .
I see this question getting asked more and more often, which very much remind me of the days where testing was also done manually and with scripts before Mercury Interactive came up with Testing Automation. Time to do the same for application release and deploy automation.