SVN Post-Commit для обновления рабочей копии, когда рабочая копия находится на сетевом диске

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

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

Однако это ошибка при фиксации. Вот каталог моей рабочей копии, на который есть ссылка в файле post-commit.bat:

SET WORKING_COPY=Z:\testweb

Однако это приводит к ошибке ...

post-commit hook failed (exit code 1) with output: svn: Error resolving case of 'Z:\testweb'

Я уверен, что это связано с тем, что сервер не является тем же пользователем, что и я, и поэтому у него нет общего ресурса, который мне нужно сопоставить с «Z» - я просто не знаю, как это обойти. Кто-нибудь может помочь?

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


person Carl    schedule 23.03.2012    source источник
comment
Было бы проще запустить экземпляр Linux в нашей среде для размещения SVN?   -  person Carl    schedule 23.03.2012


Ответы (1)


Не делайте этого с помощью ловушки post-commit. Если вам когда-нибудь удастся добиться успеха, вы заставите того, кто сделал коммит, ждать завершения обновления. Вместо этого я рекомендую вам использовать Jenkins, который представляет собой механизм непрерывной сборки.

Вполне возможно, что вам нечего строить. В конце концов, если вы используете PHP или JavaScript, компилировать нечего. Однако вы все равно можете использовать Jenkins для обновления за вас.

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

Одна из вещей, которые вы можете сделать с Jenkins, - это автоматическое выполнение тестов или, возможно, более плавное обновление. Например, вам может потребоваться перезагрузить веб-сервер, когда вы измените несколько файлов, или, может быть, вам нужно убедиться, что если вы меняете 100 файлов, все они будут изменены одновременно, или ваш сервер не находится в стабильном состоянии. государство. Вы также можете использовать Jenkins для этого. И, если есть какие-либо проблемы, вы можете попросить Дженкинса отправить электронное письмо лицу, ответственному за сервер, о том, что обновление сервера не удалось.

Jenkins прост в настройке и использовании. Вы можете скачать его и запустить Jenkins за 10 минут. Создание работы в Jenkins может занять у вас еще 15 минут, если вы никогда раньше не видели Jenkins и не знали, как это работает.

person David W.    schedule 23.03.2012
comment
Спасибо за вклад. На самом деле я использую uberSVN, и я установил Jenkins, думая, что он может это сделать, но я не мог понять, как заставить его копировать зафиксированные файлы в мой рабочий каталог. Я еще посмотрю на это. - person Carl; 23.03.2012
comment
Хорошо, похоже, я должен установить каталог рабочей копии моего сервера в поле Local Module Directory. Однако когда я делаю это с сетевым расположением: Z: \ testweb, он сообщает мне, что должен использовать относительный путь. Но если я подключился к сети, я не думаю, что у меня есть относительный путь. Я? - person Carl; 23.03.2012
comment
Хорошо, я нашел расширенную кнопку и заполнил местоположение рабочей копии там, а вторую оставил как. но это все равно не сработает. Не удалось выполнить сборку, заявив, что не распознал Z: \ testweb - person Carl; 23.03.2012
comment
@unclesol Перейдите в конфигурацию задания. В разделе Расширенные параметры проекта заданного вами задания есть кнопка с надписью Дополнительно .... Щелкните по этой кнопке. Теперь вы увидите несколько флажков. Один помечен как использовать настраиваемое рабочее пространство. Отметьте этот флажок, и вам будет предоставлено место для записи, где должен находиться ваш рабочий каталог. - person David W.; 23.03.2012
comment
Этот диск Z установлен на сервере Jenkins? Интересно, нужно ли вам делать Z:/testweb вместо Z:\testweb. - person David W.; 23.03.2012
comment
Я также попробовал Z: / testweb, и он выдает ту же ошибку: java.io.IOException: Failed to mkdirs: Z: / testweb - я думаю, что диск только что смонтирован для моего пользователя - есть ли способ смонтировать это для сервера Jenkins? - person Carl; 23.03.2012
comment
Я также попытался включить пакетную команду, если не существует z: (net use Z: \\ servername \ sharename), где jenkins запрашивает пакетную команду, и это не имеет никакого значения. Все еще такое же сообщение об ошибке - person Carl; 23.03.2012
comment
Это похоже на проблему с разрешениями Windows. Когда Jenkins запускается в первый раз, он может пытаться удалить и воссоздать каталог Z:/testweb. Возможно, у него нет разрешения на это. Вы видите какое-либо сообщение о создании рабочего каталога? Попробуйте это, используйте рабочий каталог Jenkins по умолчанию. В сценарии Jenkins build выполните dir Z: и dir Z:\testweb и посмотрите, сможет ли Дженкинс хотя бы увидеть этот диск Z :. Если возможно, попробуйте скопировать туда файл и посмотрите, сможет ли Дженкинс это сделать. - person David W.; 26.03.2012
comment
Я думаю, это вопрос разрешения. По какой-то причине он говорит, что запускается анонимным пользователем, а затем выдает мне ошибку: java.io.IOException: Failed to mkdirs: Z: \ testweb Я не уверен, как изменить пользователя, от имени которого он работает, хотя - person Carl; 26.03.2012
comment
Как вы управляете Дженкинсом? Вы запускаете его как службу в Windows? Если вы это сделаете, вы можете изменить пользователя, который запускает службу. По умолчанию службы запускаются под учетной записью службы с полным доступом к системе, но с ограниченными разрешениями для определенных файлов, особенно для удаленных общих папок. - person David W.; 27.03.2012
comment
Я использую Jenkins, установленный как плагин для uberSVN. Я сменил пользователя, под которым работает служба uberSVN, но, похоже, для Jenkins не работает конкретная служба. - person Carl; 27.03.2012
comment
Jenkins - это программа на Java, поэтому должен быть какой-нибудь исполняемый файл Java, запускающий файл jenkins.war. Проверьте диспетчер задач и посмотрите, сможете ли вы найти пользователя, запустившего его. Я пытаюсь установить UberSVN, но это занимает очень много времени. - person David W.; 28.03.2012
comment
Чем больше я изучаю этот вопрос, тем больше мне кажется, что реальное решение - использовать CI-сервер, такой как TeamCity. Сейчас изучаю этот вариант. - person Carl; 29.03.2012
comment
Я не понимаю, как TeamCity решит эту конкретную проблему. Это похоже на проблему с разрешением, и TeamCity, вероятно, столкнется с той же проблемой. Что может помочь, так это запуск TeamCity в качестве собственной службы, которая позволит вам указать пользователя. Однако вы можете сделать то же самое с Дженкинсом. Что вам нужно сделать, так это выяснить, что в первую очередь вызывает проблему. Похоже, что какой бы пользователь ни запустил ваш сервер Subversion, он также запускает ваш Jenkins Instant. Вот идея, распечатайте из Jenkins переменную окружения %USERNAME%. - person David W.; 29.03.2012
comment
Я уже это сделал. И у этого пользователя есть общесистемные разрешения, и пользователь запускает и subversion, и jenkins. Я могу войти в систему как этот пользователь, увидеть подключенный диск, редактировать файлы на подключенном диске и все остальное. Но когда Дженкинс бежит, он говорит, что им управляет анонимный - person Carl; 30.03.2012