Лучший способ (если ваш сервер основан на Linux) сделать экспорт SVN в новый каталог, а затем переместить новый каталог для замены старого (лучший способ сделать это с помощью символических ссылок на разные версии сайт). Таким образом, сайт будет недоступен в течение секунды или двух, в то время как если у вас есть rsync и у вас большой сайт, если вы резко измените один файл, сайт будет поврежден, пока все файлы не синхронизируются.
Что касается запуска этой процедуры, лучше всего использовать svn hooks. Также рассмотрите возможность проведения некоторого автоматического тестирования перед выпуском (для базовой функциональности), потому что вы можете довольно сильно сломать ваш ствол через некоторое время, и сайт определенно будет недоступен:)
В настоящее время мы внедряем описанный выше подход в производственную среду, и установка выглядит следующим образом:
- В багажник попадает коммит
- Перед тем, как он действительно будет зафиксирован, в коде запускаются тесты, чтобы проверить, все ли работает
- После нескольких коммитов происходит развертывание (обычно под наблюдением разработчика)
- Тесты запускаются снова
- Если они успешны - все хорошо
- В случае неудачи возвращается старый экспорт и сайт снова полностью функционирует
Все это написано на PHP с использованием стандартных консольных команд.