Я пытаюсь использовать проект Azure DevOps Server 2019 (далее TFS) несколькими способами:
- Репозит для сохранения кода,
- функция Артефакты для добавления некоторых приватных пакетов,
- Конвейеры для CI (в основном это просто извлечение пакетов, сборка из кода, публикация sh к промежуточному серверу)
(Предположительно, такого рода интеграция - это целая точка.)
Мой конвейер имеет . NET Восстановление ядра * Шаг 1020 *, для которого Путь к NuGet.config установлен в пользовательскую конфигурацию внутри репо. Пока все хорошо.
Конфигурация выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="(some private server)" value="http://nuget.example/NuGet" /> <!-- (this one works fine!) -->
<add key="(the actual private feed in question)" value="https://azure-devops.example/MyCollection/_packaging/MyProject/nuget/v3/index.json" />
</packageSources>
</configuration>
В журнале сборки я вижу, что эта конфигурация соблюдается, поскольку используются все три вышеупомянутых источника. Тем не менее, третий сбой с ошибкой:
NuGet.Protocol.Core.Types.FatalProtocolException: Unable to load the service index for source https://azure-devops.example/MyCollection/_packaging/MyProject/nuget/v3/index.json.
---> System.ComponentModel.Win32Exception (0x8009030E): No credentials are available in the security package.
at System.Net.NTAuthentication.GetOutgoingBlob(Byte[] incomingBlob, Boolean throwOnError, SecurityStatusPal& statusCode)
at System.Net.NTAuthentication.GetOutgoingBlob(String incomingBlob)
at System.Net.Http.AuthenticationHelper.SendWithNtAuthAsync(HttpRequestMessage request, Uri authUri, ICredentials credentials, Boolean isProxyAuth, HttpConnection connection, HttpConnectionPool connectionPool, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage request, Uri authUri, ICredentials credentials, Boolean preAuthenticate, Boolean isProxyAuth, Boolean doRequestAuth, HttpConnectionPool pool, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at NuGet.Protocol.ServerWarningLogHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at NuGet.Protocol.HttpSourceAuthenticationHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at NuGet.Protocol.TimeoutUtility.StartWithTimeout[T](Func`2 getTask, TimeSpan timeout, String timeoutMessage, CancellationToken token)
at NuGet.Protocol.HttpRetryHandler.SendAsync(HttpRetryHandlerRequest request, ILogger log, CancellationToken cancellationToken)
at NuGet.Protocol.HttpSource.GetThrottledResponse(Func`1 requestFactory, TimeSpan requestTimeout, TimeSpan downloadTimeout, Int32 maxTries, Guid sessionId, ILogger log, CancellationToken cancellationToken)
at NuGet.Protocol.HttpSource.<>c__DisplayClass14_0`1.<<GetAsync>b__0>d.MoveNext()
Это выглядит как некоторая проблема аутентификации, но на самом деле это звучит так, как будто не пытается аутентифицировать .
У меня закончились возможные причины:
- Агент сборки работает от своего собственного пользователя
tfsbuildagent
. Я явно добавил, что права доступа в качестве соавтора (хотя читателя, по-видимому, достаточно). - Я изменил его с локального пользователя на одного в домене Active Directory, в случае, если локальные пользователи не работают должным образом.
- Я обновил с 2019 до 2019.1.1, чтобы не быть ошибкой.
- Я попытался добавить подключение к службе Учетные данные для каналов за пределами этого поля организации / коллекции . Но этот канал не снаружи. Это тот же самый проект!
Я думаю, мне нужно рассказать ему, как проходить аутентификацию (просто использовать текущие Windows учетные данные), но я не могу понять из исключения, что он даже пытается и терпит неудачу в.