SVN Hook перестал работать - обновление SVN не выполняется

У меня есть репозиторий SVN, который я настроил около месяца назад, и после некоторых усилий получил хук после фиксации, работающий для обновления рабочей копии моего веб-сайта на сервере разработки. Несколько дней все работало нормально, а вчера вдруг перестало.

Я запускаю VisualSVN Server с сервера в своей сети. Насколько я знаю, ничего не изменилось ни на веб-сервере, ни на сервере, на котором размещен сервер VisualSVN. Сервер VisualSVN не показывает никаких событий в средстве просмотра событий за последние несколько дней, поэтому я не могу увидеть, есть ли ошибка, и я не могу найти какие-либо файлы журналов, относящиеся к SVN. Когда я запускаю «svn log», он ничего не показывает, кроме коммитов. Я не уверен, что он показал бы ошибку, если бы она была.

Вот очищенная копия работающего скрипта:

@ECHO OFF

setlocal enableDelayedExpansion

svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk" 

IF %ERRORLEVEL% EQU 0 (
    FOR /F "tokens=2" %%a IN ('svnlook changed %1 -r %2') DO (
    SET NEWA=%%a 
    SET "NEWB=!NEWA:trunk/=!"
    svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass>) 
)

endlocal

Я также проверил наличие блокировок на сервере и не нашел ни одной, а также запустил очистку рабочей копии на моем сервере DEV, но все безрезультатно. Я также попытался выполнить обновление с другой рабочей станции, просто чтобы посмотреть, может ли это быть моя локальная машина, и она по-прежнему не работает должным образом. Наконец, я также попытался запустить скрипт из командной строки, и он запускается и обновляет рабочую копию, как и должно быть. На самом деле кажется, что сервер просто не запускает его.

Любая помощь в отладке этой проблемы приветствуется.

ОБНОВЛЕНИЕ: Найдя некоторые стратегии отладки, я смог подтвердить, что хук действительно работает, включив следующую команду:

echo hook ran at %date% %time% >> debug.txt

Это зарегистрировало фиксацию, как и следовало ожидать. Я также включил аналогичный код отладки, чтобы убедиться, что хук ловит правильный ствол/ветвь, что и было, и я также заставил его регистрировать каталог перед обновлением, поэтому я знал, что он собирался выполнить эту команду. Все, что он сделал. Затем, пытаясь записать ответ сервера, я изменил код обновления на следующий:

svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass> >> debug.txt)

Это вообще ничего не возвращает. Я в полной растерянности по этому поводу.

ОБНОВЛЕНИЕ 2: я не получил этого раньше, когда тестировал эту проблему, но теперь, когда я запускаю команду самостоятельно...

svn update \\<server>\<share>\dev\<working-copy>\ScriptContent\test.cfm --username <svnuser> --password

Он возвращает «svn: E020024: Ошибка разрешения случая» и выдает путь, который я только что дал.

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

ОБНОВЛЕНИЕ 3. Чтобы проверить, была ли ошибка связана с сервером, работающим как сетевая служба, и попыткой получить доступ к рабочей копии через путь UNC, я попытался изменить службу на работу от моего имени, подключить сетевой диск и использовать этот подключенный диск в сценарии. Этот тест не дал мне ошибок, но не выполнил обновление.

Кроме того, чем больше я об этом думаю, тем больше я думаю об ошибке, которую я получал из командной строки в ОБНОВЛЕНИИ 2 выше, вероятно, не то, что происходит при запуске скрипта, поскольку экран фиксации на стороне клиента (запущенный TortoiseSVN) покажет мне ошибка. Он не показывает никаких ошибок.

Итак, это то, что я знаю.

  1. Скрипт работал нормально несколько дней
  2. Скрипт внезапно перестал работать где-то на выходных
  3. Никаких изменений не было внесено ни на сервер, на котором размещена рабочая копия, ни на сервер, на котором работает репозиторий.
  4. Ловушка не генерирует никаких ошибок (поскольку они будут отображаться на экране фиксации TortoiseSVN).
  5. Команда обновления svn не выполняется.

Я в полной растерянности.


person Carl    schedule 05.11.2013    source источник
comment
вы видите какие-либо ошибки на стороне клиента?   -  person bahrep    schedule 05.11.2013
comment
Нет, ничего. Я подозреваю, что хук даже не работает, но это еще больше сбивает с толку, поскольку сам репозиторий обновляется нормально.   -  person Carl    schedule 05.11.2013
comment
На самом деле, теперь я могу подтвердить, что скрипт работает - обновляю сообщение выше.   -  person Carl    schedule 05.11.2013
comment
Попробуйте записать проблемную строку перед ее выполнением с помощью echo svn update \\<server-n ... >> debug.txt. Содержит ли ваш пароль, имя сервера, общий ресурс или каталог рабочей копии проблемные символы, например один из )&,;:<>| ?   -  person jeb    schedule 06.11.2013
comment
Я постараюсь записать это и разместить здесь. Ни в одном из этих полей нет специальных символов   -  person Carl    schedule 06.11.2013
comment
Когда я записываю это, это выглядит немного странно, так как в пути отсутствуют косые черты: svn update \\Mserver›\‹share›\dev\‹working-copy›\ScriptContent/test.cfm --username ‹svnuser› --пароль ‹svnpass›   -  person Carl    schedule 06.11.2013
comment
Кроме того, я не думал об этом, но идентифицированная «доля» действительно имеет символ $. Все еще не уверен, почему любая из этих вещей работала раньше, а затем внезапно перестала работать.   -  person Carl    schedule 06.11.2013
comment
Больше добавлено выше в разделе ОБНОВЛЕНИЕ 2   -  person Carl    schedule 06.11.2013
comment
Я нашел решение. Ответ опубликован ниже   -  person Carl    schedule 07.11.2013


Ответы (2)


После нескольких дней борьбы с этим я наконец нашел решение. Сервер VisualSVN по умолчанию запускается под учетной записью пользователя сетевой службы. Чтобы решить проблему, я выполнил следующие шаги.

  1. Настройте учетную запись пользователя на сервере репозитория в качестве члена группы администраторов сервера VisualSVN.
  2. Служба VisualSVN Server назначена для запуска под этой учетной записью.
  3. Настройте учетную запись пользователя на веб-сервере в качестве члена группы «Администраторы» с тем же именем и паролем, что и у учетной записи на сервере репозитория.
  4. Перезапустил службу сервера VisualSVN.

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

person Carl    schedule 07.11.2013
comment
Что ты сделал это довольно небезопасно! НЕ добавляйте учетные записи служб в группы администраторов. Насколько я вижу сейчас, основной причиной был недостаточный доступ к рабочей копии на общем ресурсе. - person bahrep; 07.11.2013
comment
прокомментировал ваш ответ выше - person Carl; 07.11.2013

Что ты сделал это довольно небезопасно! НЕ добавляйте учетные записи служб в группы администраторов.

Насколько я понимаю сейчас, основной причиной был недостаточный доступ к рабочей копии на общем ресурсе.

Вы должны предоставить сервисной учетной записи VisualSVN Server доступ к общему ресурсу. (Разрешения NTFS и общего доступа). По умолчанию служба VisualSVN Server запускается под учетной записью «Сетевая служба». Эта учетная запись идентифицируется в сети как учетная запись КОМПЬЮТЕР. Поэтому вы должны предоставить учетной записи КОМПЬЮТЕР доступ к общему ресурсу, на котором находится ваша рабочая копия. Если вы по-прежнему намерены запускать сервер под выделенной учетной записью: статья http://www.visualsvn.com/support/topic/00024/ ОБЯЗАТЕЛЬНО ПРОЧИТАЙТЕ!

person bahrep    schedule 07.11.2013
comment
Мы попробовали это, и это не сработало. Мы пытались предоставить полный доступ к общему ресурсу для учетной записи, но он не обновлялся. Единственный способ обновить это, назначив права администратора. - person Carl; 07.11.2013