Другие ответы, в которых упоминаются Хадсон или Веплой, хороши.Они охватывают больше вопросов, чем то, что следует.Тем не менее, следующего может быть достаточно:
Если вы чувствуете, что это излишне, вот способ бедняка сделать это с SVN и немного творческого системного администратора.
Сделайте ваш документ гордости корнемсимволическая ссылка, а не фактический каталог.Это означает, что у вас есть что-то вроде этого:
/var/www/myproject-1-0-0
/var/www/myproject-1-1-0
/var/www/myproject-1-1-1
/var/www/html -> myproject-1-1-1
Это означает, что вы можете извлекать код в производство (скажем, myproject-1-1-2) без перезаписи обслуживаемого материала.Затем вы можете почти мгновенно переключать кодовые базы, выполняя что-то вроде:
$ rm html && ln -s myproject-1-1-2 html
Я бы порекомендовал не делать svn checkout / svn export вашего транка в рабочей коробке.Вместо этого создайте ветку заблаговременно (назовите ее как myproject-XYZ).Таким образом, если вам нужно сделать очень напряженную настройку производственного кода, вы можете зафиксировать его обратно в ветку и объединить его с магистралью после того, как пожар погас)
Я делаю это много, и этоработает довольно хорошо.Тем не менее, у него есть несколько существенных недостатков:
В основном, вы должны самостоятельно выполнять миграцию базы данных или другие сценарии обновления.Если у вас есть сценарии (обычный старый SQL или что-то более сложное), вам нужно подумать о том, как лучше всего их выполнять.Время простоя с надеждой на одну минуту не может быть плохой идеей.Вы можете сохранить «сайт технического обслуживания» (/ var / www / mainenance) и указать на него символическую ссылку на несколько минут, если вам нужно.
Этот метод не такой крутой, как, например, Weploy, но для относительно небольших проектов (запущенных на одном сервере с небольшими базами данных) это часто достаточно хорошо и очень просто.