Esta pergunta é realmente uma questão sobre procedimentos de lançamento (e ferramentas), em vez de administração do sistema, mas aqui está minha melhor resposta:
Qualquer versão recente do Subversion cuida muito bem das suas necessidades de gerenciamento de configuração, mas, como Peter disse, não é uma ferramenta de implantação. Uma opção seria criar uma implantação em sua infraestrutura de criação regular (por exemplo, "fazer implantação") e gerenciar suas regras de implantação ao lado de seu código.
Do ponto de vista do gerenciamento de configuração, você precisa acompanhar tudo que seu aplicativo precisa para funcionar, incluindo código, bibliotecas externas (em versões específicas), servidor da web, versões do sistema operacional, etc. 'make deploy' deve tentar garantir todas essas coisas existem antes de tentar implantar uma nova versão.
Ferramentas como o Hudson também podem lidar com a implantação para você, mas você ainda precisará dizer o que fazer e eu simplesmente prefiro manter meus procedimentos de gerenciamento de configuração o mais simples possível. Um exemplo seria permitir que Hudson invoque 'make deploy', mas não armazene nenhuma outra informação no Hudson que você precise recuperar para recriar em máquinas adicionais.
Com que frequência você fará liberações que precisam ser implantadas? Eu consideraria algo ao longo das linhas de marcação de seu webapp em tags / e ter um mecanismo de pós-commit que sabe que as tags / webapp-1.0.4 precisam ser exportadas para seu webroot. Se o seu webapp for grande, considere fazer com que o hook solte um arquivo especial em / tmp que um cronjob verifica a cada minuto e toma a ação apropriada.
Se você quiser uma resposta mais detalhada, elabore o cronograma de lançamento, o tamanho da base de código, a escolha da linguagem, o ambiente do SO e as dependências.