Публикация Azure Devops в собственном канале внезапно приводит к 403 запрещенным

Я использую Azure DevOps для проекта в течение достаточно долгого времени, но вдруг публикация в канале моей организации/коллекции приводит к ошибке 403.

Я создал фид и могу выбрать его на этапе сборки nuget push, но он не работает. Я создал новый канал для публикации пакетов NuGet, и он снова отлично работает. Мне кажется, что срок действия токена истек, но я никогда его не создавал и не использовал для аутентификации. Я также не хочу менять свой фид NuGet на новый, так как хочу использовать и старые пакеты.

Это конвейер сборки:

Публикация Azure Devops в собственном канале внезапно приводит к 403 запрещенным

А это трассировка стека:

Active code page: 65001 SYSTEMVSSCONNECTION exists true SYSTEMVSSCONNECTION exists true SYSTEMVSSCONNECTION exists true

[warning]Could not create provenance session: {"statusCode":500,"result":{"$id":"1","innerException":null,"message":"User

'a831bb9f-aef5-4b63-91cd-4027b16710cf' lacks permission to complete this action. You need to have 'ReadPackages'.","typeName":"Microsoft.VisualStudio.Services.Feed.WebApi.FeedNeedsPermissionsException, Microsoft.VisualStudio.Services.Feed.WebApi","typeKey":"FeedNeedsPermissionsException","errorCode":0,"eventId":3000}} Saving NuGet.config to a temporary config file. Saving NuGet.config to a temporary config file. [command]"C:\Program Files\dotnet\dotnet.exe" nuget push d:\a\1\a\Microwave.0.13.3.2019072215-beta.nupkg --source https://simonheiss87.pkgs.visualstudio.com/_packaging/5f0802e1-99c5-450f-b02d-6d5f1c946cff/nuget/v3/index.json --api-key VSTS error: Unable to load the service index for source https://simonheiss87.pkgs.visualstudio.com/_packaging/5f0802e1-99c5-450f-b02d-6d5f1c946cff/nuget/v3/index.json. error: Response status code does not indicate success: 403 (Forbidden - User 'a831bb9f-aef5-4b63-91cd-4027b16710cf' lacks permission to complete this action. You need to have 'ReadPackages'. (DevOps Activity ID: 2D81C262-96A3-457B-B792-0B73514AAB5E)).

[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1

[error]Packages failed to publish

[section]Finishing: dotnet push to own feed

Есть ли вариант, который я упускаю из виду, когда мне нужно как-то аутентифицировать себя? Это так странно.

🤔 А знаете ли вы, что...
.NET Core поддерживает современные архитектурные стили, такие как микросервисы.


26
15 251
7

Ответы:

Решено

"message":"User 'a831bb9f-aef5-4b63-91cd-4027b16710cf' lacks permission to complete this action. You need to have 'ReadPackages'.

Согласно этому сообщению об ошибке, полученная вами ошибка, вызванная пользователем (a831bb9f-aef5-4b63-91cd-4027b16710cf), не имеет прав доступа к вашему каналу.

А также, как я проверил из бэкэнда, a831bb9f-aef5-4b63-91cd-4027b16710cf — это VSID вашей учетной записи Build Service. Итак, попробуйте добавить этого пользователя (Служба сборки Micxxxave (sixxxxss87)) в целевой канал и назначить этому пользователю роль разрешений Автор или выше в канале.

Кроме того, здесь есть документ, на который вы можете сослаться:

В разделе «Разрешения на ленту» появился новый пользовательский интерфейс:

New UI to allow project-scoped builds


Для дальнейшего расширения решения Merlin и связанных ссылок (в частности, это о размахе), если в вашем решении есть только ОДИН проект, Azure Pipelines автоматически ограничивает область действия агента задания самим агентом. В результате у него нет видимости каких-либо служб за его пределами, включая ваши собственные частные репозитории NuGet, хранящиеся в конвейерах.

Решения с несколькими проектами автоматически разблокируются, что позволяет агентам сборки видеть ваши частные каналы NuGet, хранящиеся в конвейерах.

Я обнаружил, что самый простой способ снять ограничения области действия для одиночных сборок проекта — это:

  1. В проекте конвейеров щелкните шестеренку «Настройки» в левом нижнем углу экрана.
  2. Перейдите в раздел «Конвейеры» > «Настройки».
  3. Снимите флажок «Ограничить область авторизации задания текущим проектом».

Привет, ваша ошибка 403 во время ваших сборок с использованием частных каналов NuGet теперь должна исчезнуть!


Все еще интересно, где находится этот параметр «Ограничить область авторизации задания текущим проектом», мне потребовалось некоторое время, чтобы найти его, в настройках проекта, скриншот ниже должен помочь


Я хочу добавить немного больше информации на тот случай, если у кого-то возникнет такая же проблема. Вся информация, предоставленная другими пользователями, верна, есть еще одно предостережение, которое следует учитывать. Параметры политик заменяются параметрами организации. Если вы обнаружите, что не можете изменить настройки или они выделены серым цветом, щелкните логотип «Azure DevOps» в левой верхней части экрана.

Azure DevOps

Нажмите «Настройки организации» в левом нижнем углу.

Organization settings

Перейдите в Pipeline --> Settings и проверьте текущую конфигурацию.

Current settings

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


Это может быть не сразу очевидным или интуитивно понятным, но эта ошибка также возникает, когда проект, в котором работает ваш конвейер, является общедоступным, а фид, к которому он обращается, — нет. Это может иметь место, например, при доступе к каналу на уровне организации.

В этом сценарии есть три возможных решения:

  1. Сделайте канал общедоступным, и в этом случае аутентификация не требуется; или
  2. Сделать проект приватным, тем самым заставив службу пройти аутентификацию; или
  3. Включите Разрешить сборки на уровне проекта в свои разрешения на фид.

Инструкции для последнего варианта включены в @Merlin Liang - отличный ответ MSFT, но другие варианты могут быть предпочтительнее в зависимости от ваших требований.

Как минимум, мы надеемся, что это даст дополнительное представление о типах обстоятельств, которые могут привести к этой ошибке.


Если вы не хотите/не можете изменять настройки уровня проекта, такие как здесь

Вы можете установить это для каждого фида, нажав «Разрешить сборки на уровне проекта» (для меня выделено серым цветом, так как оно уже включено).

Это отличается от принятого ответа, так как вам не нужно явно добавлять пользователя и устанавливать разрешения.


Еще одна вещь, которую нужно проверить, если вы используете файл yaml для конвейеров, это наличие файла название канала верное.

Я знаю, что это может показаться спорным вопросом, но я потратил много времени на отладку ошибки ..lacks permission to complete this action. You need to have 'AddPackage'. только для того, чтобы обнаружить, что я ссылался на неправильный фид в своем файле azure-pipelines.yaml.