Краткий обзор проблемы. У меня есть веб-сайт, который находится в SVN и проверялся на 2 разных серверах для балансировки нагрузки. Это сайт на drupal, и все, кроме каталога ресурсов и файлов, проверяется локально на серверах.
Теперь при обновлении мне нужно обновить две локальные проверки вручную. (Svn up) Это подвержено ошибкам и приведет к еще большим накладным расходам, если мы решим добавить еще один веб-сервер в ротацию.
Короче говоря: мне нужно найти способ автоматизировать синхронизацию двух локальных проверок, поэтому мне нужно обновить только на 1 сервере, и все будет синхронизировано.
Вещи, которые я пробовал:
md5 для каталога на сервере 1 и через SSH на сервере 2 (за исключением каталогов .svn) с помощью команды find, затем выполнение svn ups на сервере 2 с использованием результата diff в качестве аргументов. Он всегда дает мне одни и те же файлы, но разные.
ssh $ TARGET "cd" $ SVN_TARGET "&& find. -name .svn -prune -o -type f -print0 | xargs -0 md5sum" >> /tmp/server2.sums
cd $ SVN_SOURCE && найти. -name .svn -prune -o -type f -print0 | xargs -0 md5sum >> /tmp/server1.sums
diff /tmp/server1.sums /tmp/server2.sums | вырезать -d "." -f2 | xargs -i ssh $ TARGET "su www-data -c 'svn up / dir / to / svn / repo / {} --username \" ******* \ "--password \" **** ** \ "'"
используя svn info, а затем svn diff с основной ревизией, чтобы получить все измененные файлы. Проблема заключается в том, что идентификатор локальной ревизии не совпадает с идентификатором основной ревизии на сервере SVN, даже если он обновлен.
Любая помощь очень ценится и извиняет за стену текста :)
Я настоятельно рекомендую использовать капистрано для развертывания кода. См. Следующие руководства по интеграции с Drupal: первый и второй.
Если вы работаете в ОС Linux, вы можете использовать DRBD для синхронизации данных между двумя серверами SVN на уровне блоков, не беспокоясь о Subversion.
Как насчет контрольного задания, запущенного в crontab на одном из хостов, которое выполняет svn-информацию для определения ревизии, которое затем выполняет svn-обновление для этой ревизии и в то же время запускает ssh svn update для той же ревизии на другом хосте ?
Как насчет записи crontab на каждом хосте, которая запускает сценарий каждые пять минут? Сценарий может обновлять репозиторий svn и делать любую постобработку, которая будет сочтена необходимой ....
Или у вас может быть хук после фиксации в Subversion, запускающий развертывание для двух клиентов ...