Implantação da Web automática em vários servidores com o Mercurial

Estive analisando alguns fluxos de trabalho do Mercurial recentemente, quando começamos a usá-lo para o nosso desenvolvimento web. Precisamos de uma maneira automatizada de propagar as alterações que são enviadas para as instâncias de teste e ativas para vários pontos de extremidade. Aqui está um diagrama da ideia:

         +-------+
         |Dev    |
         |       |
         +-------+
             |  Push
             +--------+
                      |
                      V
+-------+   Push  +-------+
|Live   |<--------|Test   |
|server |         |server |
+-------+         +-------+
    |    +-------+    |    +-------+
    +--->|Live 1 |    +--->|Test 1 |
    |    |       |    |    |       |
    |    +-------+    |    +-------+
    |                 |
    |    +-------+    |    +-------+
    +--->|Live 2 |    +--->|Test 2 |
    |    |       |    |    |       |
    |    +-------+    |    +-------+
    |                 |
    |    +-------+    |    +-------+
    +--->|Live 3 |    +--->|Test 3 |
         |       |         |       |
         +-------+         +-------+

Basicamente, a idéia é que tudo o que nós, como desenvolvedores, precisaríamos fazer é, uma vez que o desenvolvimento tenha atingido um nível estável, emitir o comando push (que não necessariamente precisa ser apenas umhg push) para o servidor de teste e, a partir daí, ele se propaga automaticamente. Então, uma vez que o teste é concluído, nós o enviamos do teste para o live (ou, se for mais fácil, do dev para o live), e isso também se propaga para cada uma das diferentes instância

Seria bom se pudéssemos adicionar novos testes e instâncias dinâmicas com bastante facilidade (por exemplo, talvez se os IPs estivessem armazenados em um banco de dados que pudesse ser lido por um script, etc ...

Qual seria a melhor maneira de conseguir isso? Eu sei sobre ganchos Mercurial. Talvez um script em processo que o gancho iria executar? Eu também olhei para Fabric, seria uma boa opção?

Além disso, que tipo de software de suporte cada um dos pontos de extremidade precisaria? Seria mais fácil se um repositório Mercurial existisse em cada servidor? O acesso SSH seria benéfico? Etc ...

questionAnswers(1)

yourAnswerToTheQuestion