Как долгое время, я нахожу свой вопрос вишни сложным в отношении 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 в режиме командной строки; однако это просто неудовлетворительно, потому что мы предпочитаем запускать его в режиме обслуживания (который отлично работает с репозиториями в нашем локальном домене), чтобы избежать необходимости создания запланированной задачи, чтобы запустить его при запуске машины.
У кого-нибудь есть предложения?