2010-02-02 3 views
1

Как долгое время, я нахожу свой вопрос вишни сложным в отношении CruiseControl.NET, Subversion и удаленного репозитория. Возникает проблема:CruiseControl.NET Service/Subversion - невозможно подключиться к удаленному репозиторию

Возьмите удаленный репозиторий Subversion 1.6.6, работающий под управлением Windows Server 2008 с пакетом обновления 2 (SP2), используя Apache 2.2.14 в качестве шлюза для доступа к портам 80 и 443 - мы перенаправляем незашифрованный трафик на безопасный порт и у нас есть правильно настроенный уровень SSL, работающий с самозаверяющим сертификатом. Все это работает - я могу указать браузер с моего локального компьютера (XP SP2 или Server 2008 SP2) в этот репозиторий, безболезненно пройти проверку сертификата, пройти аутентификацию против ACL репозитория и посмотреть, что там находится. Точно так же команды SVN, выполненные на моей локальной машине (либо в командной строке, либо через TortoiseSVN) работают безупречно.

Теперь добавьте CruiseControl.NET 1.4.4.83 - на данный момент работает на моей локальной машине с помощью простого сценария, чтобы вытащить исходный код из удаленного репозитория и создать очень базовое приложение. Этот же сценарий отлично работает против локального репозитория, поэтому единственное отличие - это URL Subversion, который теперь указывает на удаленный сервер.

Если я запускаю CC.NET в командной строке shell (ccnet.exe) под своей учетной записью, она работает.

Если я запускаю CC.NET как службу (ccservice.exe), однако он терпит неудачу; по умолчанию он работает как LOCALSERVICE, но я уже изменил его, чтобы выполнить мои учетные данные. В этом режиме выдается первая команда Subversion (SVN LOG), жалуясь, что она не может подключиться к серверу.

Я провел хорошие четыре или пять дней, исследуя это; Я знаю, что это не проблема типа межсетевого экрана, потому что одна и та же команда, что и проблемы с CC.NET, работает в оболочке командной строки, и, конечно же, я могу подключиться к удаленному серверу через TortoiseSVN и браузер. Это не SSL и/или сертификат, мешающие мне, так как я уже импортировал сертификат. И снова это отлично работает в «ручном» режиме, используя команды TortoiseSVN, браузер или SVN в командной строке. Это не проблема с разрешением DNS, потому что я могу указать фактический IP-адрес удаленного сервера, и он все еще не подключается, но, конечно, подключается нормально, если я запускаю в режиме командной строки ...

Я даже скачал и пробился через исходный код CC.NET, чтобы узнать, есть ли что-то странное. Насколько я могу судить, единственная разница в выдаче команд при работе в сервисном режиме заключается в том, что был вызван вызов AllocConsole для подготовки консоли для выполнения команд команды Subversion, когда они появляются.

Лучшее предположение, которое я могу сделать на данном этапе, заключается в том, что сеанс AllocConsole каким-то образом отличается от стандартного сеанса командной строки - тем, что служба работает под моими учетными данными пользователя, так как у AllocConsole нет «правильный» доступ к сети. Тем не менее, я не знаю достаточно о AllocConsole или исходном коде CC.NET, чтобы иметь возможность доказать это, и поэтому я в тупике.

На данный момент я запускаю CC.NET в режиме командной строки; однако это просто неудовлетворительно, потому что мы предпочитаем запускать его в режиме обслуживания (который отлично работает с репозиториями в нашем локальном домене), чтобы избежать необходимости создания запланированной задачи, чтобы запустить его при запуске машины.

У кого-нибудь есть предложения?

ответ

1

Трещины. Это не проблема межсетевого экрана, это была проблема с прокси-сервером.

Мы используем Bluecoat здесь (да, я знаю, а не мой звонок), и поэтому файл серверов Subversion, который находится в папке «C: \ Documents and Settings \ All Users \ Application Data \ Subversion \» на всех наших на компьютерах разработчиков есть запись, позволяющая нам обойти прокси-сервер, чтобы выйти на определенные внешние репозитории. Однако мы обычно используем TortoiseSVN в основном и получаем доступ к этому файлу через лист свойств - до сих пор, не понимая, что это файл Subversion, а не файл TortoiseSVN.

Естественно, поскольку мы не используем TortoiseSVN на серверах сборки, мы никогда не сталкивались с файлом 'servers'. Однако теперь, когда CruiseControl.NET должен получить доступ к внешнему репозиторию (ранее он говорил только с нашими внутренними репозиториями), он не смог пройти мимо контрольно-пропускного пункта Bluecoat.

После того, как головоломка щелкнула на месте, я создал файл «серверов» в окне сборки, добавил к нему свою конфигурацию байпаса, и внезапно CruiseControl.NET и Subversion в режиме обслуживания могут видеть удаленный репозиторий.

Я все еще не совсем уверен, почему он работал в режиме командной строки, но не в сервисном режиме, но я исправил его, поэтому я счастлив. :)

Смежные вопросы