NuGet Push приводит к 401 несанкционированной ошибке в сборке TFS и на самом сервере TFS

NuGet Push приводит к 401 несанкционированной ошибке в сборке TFS и на самом сервере TFS

Мы находимся в процессе перехода от BitBucket, Jenkins и Nexus к TFS 2018 для размещения нашего Git-репозитория, постоянной интеграции нашего кода C# и хранения наших артефактов сборки. Мы находимся в процессе добавления нашего первого определения сборки на наш сервер TFS, и наше определение сборки (ниже) будет успешным, пока мы не перейдем к шагу NuGet Push.

  1. Получить источники - клонирует Git-репозиторий с того же сервера TFS
  2. NuGet Tool Installer (версия 0. *) - устанавливает NuGet 4.3.0
  3. Загрузить файл (версия 1. *) - загружает исполняемый файл JAR, который будет использоваться во время процесса сборки (для получения дополнительной информации см. Внизу).
  4. NuGet (версия 2. *) - восстанавливает пакеты NuGet в нашем решении
  5. Powershell (версия 1. *) - вызывает JAR для заполнения зависимостей в нашем .nuspec файл для шага пакета NuGet.
  6. Powershell (версия 1. *) - вызывает JAR для увеличения номера версии ревизии (подробнее см. Внизу).
  7. MSBuild (версия 1. *) - создает решение
  8. Powershell (версия 1. *) - вызывает JAR для увеличения номера сборки и второстепенных версий (подробнее см. Внизу).
  9. NuGet (версия 1. *) - упаковывает пакет NuGet
  10. NuGet (версия 1. *) - отправляет пакет NuGet в канал NuGet на TFS.
  11. Powershell (версия 1. *) - вызывает JAR для сохранения окончательного номера версии на сервере, чтобы его можно было использовать в будущих сборках (подробнее см. Внизу).

Когда мы дойдем до шага 10, который проталкивает пакет NuGet, мы получаем следующую ошибку, даже несмотря на то, что служба сборки проекта является "владельцем" в фиде NuGet, а область авторизации проекта определения сборки установлена ​​на "Коллекция проекта" ".

2018-02-01T15:55:20.2291785Z ##[section]Starting: NuGet push
2018-02-01T15:55:20.2291785Z ==============================================================================
2018-02-01T15:55:20.2291785Z Task         : NuGet
2018-02-01T15:55:20.2291785Z Description  : Restore, pack, or push NuGet packages, or run a NuGet command. Supports NuGet.org and authenticated feeds like Package Management and MyGet.
2018-02-01T15:55:20.2291785Z Version      : 2.0.7
2018-02-01T15:55:20.2291785Z Author       : Microsoft Corporation
2018-02-01T15:55:20.2291785Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613747)
2018-02-01T15:55:20.2291785Z ==============================================================================
2018-02-01T15:55:20.9633816Z [command]C:\WINDOWS\system32\chcp.com 65001
2018-02-01T15:55:21.0259411Z Active code page: 65001
2018-02-01T15:55:21.0416108Z SYSTEMVSSCONNECTION exists true
2018-02-01T15:55:21.0727651Z Detected NuGet version 4.3.0.4406 / 4.3.0
2018-02-01T15:55:21.1509681Z Saving NuGet.config to a temporary config file.
2018-02-01T15:55:21.1668061Z ##[warning]No package sources were found in the NuGet.config file at C:\agent\_work\5\Nuget\tempNuGet_178.config
2018-02-01T15:55:21.1821145Z [command]C:\agent\_work\_tool\NuGet\4.3.0\x64\nuget.exe push C:\agent\_work\5\a\{name_of_our_nuget_package}.nupkg -NonInteractive -Source https://{tfs_server_location}/Mobile%20Applications/_packaging/a4a3b7fe-b530-4e51-b8c2-3ee73ede20da/nuget/v3/index.json -ApiKey VSTS -Verbosity Detailed
2018-02-01T15:55:21.7455077Z NuGet Version: 4.3.0.4406
2018-02-01T15:55:22.1513242Z CredentialProvider.TeamBuild: "C:\agent\_work\_tasks\NuGetCommand_333b11bd-d341-40d9-afcf-b32d5ce6f23b\2.0.7\node_modules\nuget-task-common\NuGet\CredentialProvider\CredentialProvider.TeamBuild.exe" -uri https://{tfs_server_location}/Mobile Applications/_packaging/a4a3b7fe-b530-4e51-b8c2-3ee73ede20da/nuget/v3/index.json -nonInteractive -verbosity detailed
2018-02-01T15:55:22.1513242Z CredentialProvider.TeamBuild: URI Prefixes:
2018-02-01T15:55:22.1513242Z CredentialProvider.TeamBuild:     https://{tfs_server_location}/Mobile Applications/
2018-02-01T15:55:22.1513242Z CredentialProvider.TeamBuild: URI: https://{tfs_server_location}/Mobile
2018-02-01T15:55:22.1513242Z CredentialProvider.TeamBuild: Is retry: False
2018-02-01T15:55:22.1513242Z CredentialProvider.TeamBuild: Matched prefix: 
2018-02-01T15:55:22.3854366Z CredentialProvider.TeamBuild: This provider only handles URIs from the build's Team Project Collection
2018-02-01T15:55:22.7448581Z Unable to load the service index for source https://{tfs_server_location}/Mobile%20Applications/_packaging/a4a3b7fe-b530-4e51-b8c2-3ee73ede20da/nuget/v3/index.json.
2018-02-01T15:55:22.7448581Z   Response status code does not indicate success: 401 (Unauthorized).
2018-02-01T15:55:22.7610511Z NuGet.Protocol.Core.Types.FatalProtocolException: Unable to load the service index for source https://{tfs_server_location}/Mobile%20Applications/_packaging/a4a3b7fe-b530-4e51-b8c2-3ee73ede20da/nuget/v3/index.json. ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
2018-02-01T15:55:22.7610511Z    at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.HttpSource.<>c__DisplayClass12_0`1.<<GetAsync>b__0>d.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Common.ConcurrencyUtilities.<ExecuteWithFileLockedAsync>d__2`1.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.HttpSource.<GetAsync>d__12`1.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.ServiceIndexResourceV3Provider.<GetServiceIndexResourceV3>d__9.MoveNext()
2018-02-01T15:55:22.7610511Z    --- End of inner exception stack trace ---
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.ServiceIndexResourceV3Provider.<GetServiceIndexResourceV3>d__9.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.ServiceIndexResourceV3Provider.<TryCreate>d__8.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.Core.Types.SourceRepository.<GetResourceAsync>d__16`1.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.PackageUpdateResourceV3Provider.<TryCreate>d__1.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.Core.Types.SourceRepository.<GetResourceAsync>d__16`1.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Protocol.Core.Types.SourceRepository.<GetResourceAsync>d__15`1.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Commands.CommandRunnerUtility.<GetPackageUpdateResource>d__3.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.Commands.PushRunner.<Run>d__0.MoveNext()
2018-02-01T15:55:22.7610511Z --- End of stack trace from previous location where exception was thrown ---
2018-02-01T15:55:22.7610511Z    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
2018-02-01T15:55:22.7610511Z    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
2018-02-01T15:55:22.7610511Z    at NuGet.CommandLine.PushCommand.<ExecuteCommandAsync>d__28.MoveNext()
2018-02-01T15:55:22.7916018Z ##[error]Error: C:\agent\_work\_tool\NuGet\4.3.0\x64\nuget.exe failed with return code: 1
2018-02-01T15:55:22.7916018Z ##[error]Packages failed to publish
2018-02-01T15:55:22.8228295Z ##[section]Finishing: NuGet push

Первоначально мы пытались отправить пакет NuGet в ленту TFS, выбрав опцию "Эта учетная запись / коллекция" в разделе "Местоположение целевого канала" в шаге принудительной сборки NuGet, как вы можете видеть здесь.

Однако мы даже попробовали опцию "Внешний сервер NuGet (включая другие учетные записи / коллекции)" (справа от красного контура на изображении выше), где мы добавили URL-адрес к каналу NuGet и мои учетные данные с помощью своего PAT, который я создал ранее. на этой неделе, и мы получили ту же ошибку.

Интересно, что всякий раз, когда я призываю nuget push командуйте Powershell на моем компьютере и передайте в тот же .nupkg файл с моим именем пользователя и PAT, он может нажать без проблем; Когда я пытаюсь сделать то же самое с сервера TFS, подключившись к нему через удаленный рабочий стол, возникает та же проблема.

Кто-нибудь еще испытывал эту проблему? У кого-нибудь есть решение для этой проблемы или может помочь нам по правильному пути?


Примечание относительно исполняемого JAR: в нашем процессе сборки мы вызываем скрипт Powershell, который собирает дополнительные аргументы для передачи исполняемому JAR в качестве аргументов командной строки. Затем JAR использует эту информацию для увеличения частей нашего номера версии, который соответствует формату major.minor.build.revision, когда этап в нашей сборке завершается. Мы использовали этот JAR в течение последних нескольких месяцев на Jenkins, и это не повлияло на нашу способность отправлять пригодные для использования пакеты NuGet в наш репозиторий Nexus.

1 ответ

Решение

Пожалуйста, попробуйте следующие пункты, чтобы сузить проблему:

  1. Убедитесь, что на вашем TFS AT отключена базовая аутентификация IIS.

    Токены, отправленные с помощью обычной проверки подлинности, как это делает nuget.exe в этих задачах, не будут работать, если включена базовая проверка подлинности IIS. Немного сбивает с толку, но в основном IIS мешает TFS проверять подлинность базовых учетных данных.

    Подробные сведения см. В этой статье. Включение базовой проверки подлинности IIS делает недействительным использование токенов личного доступа.

  2. Попробуйте запустить агент сборки как "обычный" пользователь (установите свою учетную запись использования в качестве учетной записи службы агента сборки)

За подробностями обращайтесь к этой аналогичной теме: сбой задачи сборки NuGet Publisher с ошибками 401 (неавторизовано) и 402 (требуется оплата)

Другие вопросы по тегам