Как лучше всего обновить сайт из Subversion - PullRequest
5 голосов
/ 16 октября 2008

У меня есть веб-сайт PHP, поддерживаемый базой данных MySQL, и небольшая команда программистов, отправляющих код в Subversion. Обычно мы пишем код, тестируем его локально, фиксируем в subversion, а затем копируем измененные файлы в скрытую область для онлайн-тестирования.

Однако ошибки могут быть допущены. Иногда я хочу обновить сайт, чтобы я знал, без сомнения, что код сайта и база данных действительно представляют то, что находится в подрывной деятельности. Я хотел бы получить как можно более близкое решение к одному щелчку, чтобы оно было надежным.

Какой лучший способ сделать это?

Кстати, если это имеет значение, мы разрабатываем на машинах Windows.

Ответы [ 10 ]

7 голосов
/ 16 октября 2008

Экспорт может выполняться автоматически после каждого коммита с помощью хука post-commit:

http://svnbook.red -bean.com / о / 1,5 / svn.ref.reposhooks.post-commit.html

Вы можете настроить хук для автоматического экспорта проекта в скрытую область для онлайн-тестирования.

4 голосов
/ 16 октября 2008

Я бы не рекомендовал проверять ваш код на вашем производственном сервере. Это может потенциально выставить управляющие файлы svn (.svn) на сервере.

Я бы порекомендовал использовать скрипт (python, ruby ​​и т. Д.) В сочетании с командной строкой svn и FTP-клиентом для экспорта файлов из svn и ftp файлов на сервер. Команда svn export может использоваться для извлечения набора файлов с сервера svn без всех каталогов .svn. Также не забудьте пометить хранилище svn при этом, чтобы у вас была контрольная точка того, что вы развернули.

2 голосов
/ 17 октября 2008

Мы развертываем через Subversion и используем для этого инструменты миграции баз данных (с версионированием схемы).

(http://blog.lavablast.com/post/2008/02/I2c-for-one2c-welcome-our-new-revision-control-overlords!.aspx)

(Разрабатываем в .NET)

1 голос
/ 17 октября 2008

Я рекомендую вам написать какой-нибудь скрипт, который сделает это за вас. Делаете ли вы это с помощью PHP или что-то еще, зависит только от вас. Просто помните о безопасности, когда вы делаете это.

Выполнение экспорта вашего проекта не приведет к экспорту svn: externals, которые вы могли установить, что означает, что вам нужно выполнить несколько экспортов. Когда вы пишете сценарий, это, конечно, не должно быть большой проблемой. Другое дело с экспортом, если ваш проект большой (если вы используете много видео, PDF и т. Д.), Тогда экспорт может быть довольно громоздким, особенно если ваш контроль версий размещен вне сайта и доступен только через HTTP.

Я рекомендую вам оформить заказ и убедиться, что ваш сервер не может обслуживать файлы, расположенные в скрытых папках .svn.

1 голос
/ 16 октября 2008

Если вы установите клиент командной строки Subversion, довольно просто создать пакетный файл / сценарий оболочки, который будет извлекать экспорт последней ревизии из хранилища в папку на сервере. Для этого требуется, чтобы у вас была такая же файловая структура в Subversion, как и на сервере (если, конечно, вы не хотите добавить логику для изменения структуры в скрипте).

1 голос
/ 16 октября 2008

Управление версией кода и управление версией базы данных - две очень разные проблемы. Решение, которое я предпочитаю, делается в три этапа (Тест, Тест развертывания, Live), а не в два.

  • Обновление кода и применение изменений базы данных с помощью сценариев в среде разработки
  • Загрузите действующую базу данных в среду тестирования развертывания, восстановите ее и примените сценарии изменения
  • Проверка кода по «синхронизированной» действующей базе данных
  • Обновите живую среду через svn из соответствующей ветки в хранилище (мы делаем это через туннелирование ssh, так как это среда linux) и примените сценарии изменений к живой базе данных

Редактировать: Обновление для реальной среды лучше всего выполнять с помощью экспорта, а не извлечения / обновления. Это не оставляет контрольный файл SVN висят вокруг. Это может иметь или не иметь последствий для безопасности, однако оно заставляет вас указывать, какую ветвь вы проверяете каждый раз.

Ваш «один клик», вероятно, может быть записан в сценарий для последнего шага.

1 голос
/ 16 октября 2008

А как насчет проверки кода для того места, откуда вы хотите его запустить?

0 голосов
/ 04 августа 2011

Вы проверили Beanstalk? http://beanstalkapp.com/ Это сервер SVN / GIT с автоматическим развертыванием FTP.

0 голосов
/ 20 июля 2009

Спасибо за все ответы, очень помогли доказать, что я не ошибаюсь. Мы разрабатываем и тестируем локальную проверку онлайн-хранилища Subversion. Когда мы хотим развернуть новую версию, мы запускаем скрипт, который в основном удаляет текущий экспорт на живом тестовом сервере, создает новый экспорт и затем развертывается на всех веб-серверах через rsync.

Проблема с этим: Rsync всегда копирует все файлы при развертывании на liveserver из-за полностью нового экспорта. На самом деле я никогда не находил время, чтобы узнать, как обновить экспорт.

На другой машине я просто извлекаю и развертываю с помощью rsync --without .svn

0 голосов
/ 16 октября 2008

Я бы порекомендовал:

  • копирование каждой старой сборки в собственный каталог (для быстрого восстановления; вам, вероятно, нужно сохранить только один из них) в недоступной для Интернета части вашего сервера.
  • Затем используйте svn export, чтобы получить всю новую сборку из SVN. Не используйте svn checkout, так как это приведет к тому, что каталоги .svn повсюду.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...