I'm a big fan of having an automated deployment process. It's really the web development analog to the "one step build process", as described in the Joel Test. In the past I have used various shell scripts to perform this task, but I have recently become a convert to Capistrano (or "cap" for short). With Capistrano, uploading your code to the test server is as simple as typing cap deploy. When you're ready to launch in production, it's just cap production deploy.
In part one he sets up his Capistrano configuration with his deploy.rb, development.rb and capfile configuration files. In the second part he integrates Drush, a multisite deployment and a multistage process.