We use a piece of open source software called Jenkins. We add a few bits in, a plugin for spotting changes in Git repositories, a plugin for pinging us in chat 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 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.