We use a piece of open source software called Jenkins. We add a few bits in, a plugin for spotting changes in Git or Subversion repositories, a plugin for pinging us in IRC if anything happens, but essentially, all Jenkins does is watch for *something* and if the conditions occur to cause *something* then do *something else*.

In our case, the *something* is a change in a Git or Subversion branch being continuously monitored by Jenkins (or a Build button being pressed, for production builds) and the *something else* is a custom Python script we wrote for executing on Debian servers via Fabric. That script executes all the steps necessary to build your Drupal site via the Drush command line client for Drupal.