Сбой сборки VSTS с запрещенным исключением SVN

Я настроил процесс сборки в VSTS, который извлекает исходный код из общедоступного URL-адреса SVN. Это прекрасно работает, когда я вручную ставлю сборку в очередь с панели управления или планирую запуск сборки в определенное время. Однако, когда сборка ставится в очередь непрерывной интеграцией, возникает следующее исключение:

An exception occurred while polling the repository. Error: Microsoft.TeamFoundation.Build2.Server.Extensions.BuildPollingException: Unable to connect to a repository at URL '<Path to the URL I am referencing>' --->
SharpSvn.SvnRepositoryIOForbiddenException: Unable to connect to a repository at URL '<Path to the URL I am referencing>' --->
SharpSvn.SvnRepositoryIOForbiddenException: Access to '<Path to the trunk of the repository>' forbidden

Когда я смотрю журнал событий на сервере, на котором живет Subversion, он показывает, что агент сборки пытается получить доступ к URL-адресу с анонимным входом в систему, поэтому я вижу исключение.

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


person pstricker    schedule 07.06.2016    source источник


Ответы (3)


Задание опроса ЭК выполняется агентом заданий на сервере TFS. Судя по всему, ваш Job Agent настроен на запуск как NT AUTHORITY\NETWORK SERVICE (т. е. как DOMAIN\TFSSERVER$). С другой стороны, похоже, что ваш экземпляр VisualSVN Enterprise настроен на использование NTLM. В этом случае базовые учетные данные не используются библиотекой SharpSvn, которую задание опроса использует для доступа к репозиторию. К сожалению, это ограничение SharpSvn. Вы либо должны предоставить учетной записи компьютера (DOMAIN\TFSSERVER$) доступ READ к репозиторию SVN в конфигурации сервера VisualSVN (чтобы продолжить использование NTLM), либо отключить NTLM на сервере VisualSVN, чтобы переключиться на обычную аутентификацию.

[Несколько технических подробностей] Анонимные запросы, которые вы видите в журналах SVN, являются частью обычного потока HTTP-запросов, реализованного в библиотеке SharpSvn:

  • Сначала библиотека отправляет на сервер анонимный запрос.
  • Если сервер отклоняет запрос, библиотека проверяет заголовки ответа WWW-Authenticate, чтобы определить схему аутентификации, запрошенную сервером.
  • Заголовок WWW-Authenticate: NTLM имеет более высокий приоритет по сравнению с заголовком WWW-Authenticate: Basic. Поэтому имя пользователя и пароль, указанные в конечной точке подключения, вообще не используются.
  • Если в ответе присутствует только заголовок WWW-Authenticate: Basic, библиотека использует функцию обратного вызова, предоставленную клиентом, для запроса учетных данных. В этот момент имя пользователя и пароль, указанные в конечной точке подключения, предоставляются библиотеке заданием опроса.

[Примечание 1] Задание опроса не загружает исходники из репозитория SVN, оно только запрашивает список файлов, измененных с момента его последнего успешного выполнения, и решает, пора ли запланировать сборку.

[Примечание 2]. Если задание опроса постоянно завершается сбоем по одной и той же причине, оно сообщает о каждом сотом сбое в TFS как об ошибке сборки с указанием причины сбоя.

Алекс

person alexr    schedule 06.10.2016
comment
VisualSVN Server использует аутентификацию Negotiate (Kerberos или NTLM в зависимости от возможностей клиента и среды). - person bahrep; 17.10.2016
comment
@alexr Я взял на себя эту проблему от моего коллеги pstricker. Моя организация должна поддерживать установленную аутентификацию Windows USe со следующими методами аутентификации: встроенная аутентификация Windows и базовая аутентификация включены на нашем сервере VisualSVN. На нашем сервере сборки VSTS я вижу 2 локальные группы на нашем сервере сборки: TFS_BuildService_* Я не вижу способа предоставить этим локальным группам доступ к нашим репозиториям VisualSVN. Вы говорите, что нам нужно изменить учетную запись, под которой работают службы сборки TFS, на учетную запись домена, а затем предоставить этой учетной записи доступ к репозиториям SVN? Спасибо. - person joshblair; 19.10.2016

Я смотрю, у меня похожая проблема. Использование TFS 2015 Update 3 и VisualSVN Server 3.4.6. Я получаю ту же ошибку при опросе CI. На сервере SVN я получаю следующие ошибки при каждом опросе TFS: Отказано в доступе: 'TFSSERVER$' ОПЦИИ: [клиент]

Здесь TFSSERVER$ — это имя компьютера нашего TFS-сервера.

Поэтому я дал DOMAIN\TFSSERVER$ разрешения только на чтение в корне репозитория, после чего все заработало. Не рад, что мне пришлось это сделать, конечно.

Сообщил об этой ошибке: Опрос SVN CI использует учетную запись компьютера TFS, а не учетную запись SVN, установленную в конечной точке службы

person Tom Winter    schedule 29.09.2016

Нет большой разницы между CI и ручной/запланированной сборкой репозитория SVN. Когда вы настраиваете его на непрерывную интеграцию, он просто продолжает проверять репозиторий SVN с установленным вами интервалом опроса, а затем запускает сборку, если есть какие-либо новые изменения. Единственная разница между ними заключается в том, что вам нужно установить «Фильтры» для CI и, основываясь на полученном сообщении об ошибке «Запрет доступа», у вас нет разрешения на чтение пути. Поэтому вам нужно проверить, есть ли у вашей учетной записи разрешение на чтение пути, который вы указали в «Фильтрах». введите здесь описание изображения

person Eddie Chen - MSFT    schedule 08.06.2016
comment
Спасибо за ваш ответ. Как ни странно, мой путь совпадает с веткой или тегом по умолчанию, который работает с запланированными и ручными сборками. Я знаю, что путь существует и что учетные данные пользователя для службы Subversion работают. Что мне не хватает? - person pstricker; 08.06.2016
comment
Я только что проверил журналы на сервере Subversion, и похоже, что он пытается подключиться анонимно: Доступ запрещен: ОПЦИИ «АНОНИМНЫЙ ВХОД» ‹Путь к магистрали репо› Похоже, что CI пытается получить доступ без учетных данных пользователя. - person pstricker; 08.06.2016
comment
@pstricker Я только что настроил сервер VisualSVN, но не могу воспроизвести эту проблему. CI Build работает корректно. Как настроить конечную точку службы в VSTS? - person Eddie Chen - MSFT; 13.06.2016
comment
Просто с учетными данными пользователя и URL-адресом репозитория. - person pstricker; 13.06.2016
comment
@Eddie, мы используем VisualSVN с параметром «Использовать проверку подлинности Windows» со следующими методами проверки подлинности: встроенная проверка подлинности Windows и базовая проверка подлинности включены на нашем сервере VisualSVN. - person joshblair; 19.10.2016