Azure Конвейер проекта DevOps не может получить доступ к пакету NuGet из ленты артефактов в другом проекте - PullRequest
1 голос
/ 19 февраля 2020

Обновлено 20 февраля 2020

Сводка

Azure Сборка конвейера DevOps не может найти пакет NuGet из нашего частного фида в разделе Артефакты.

Наша Azure среда DevOps

В Azure у нас есть компания "space": dev. azure .com / OurCompany

Under что у нас есть несколько проектов, поэтому, например, представьте эти три:

  • Зеленый: в нем содержатся приложения определенного типа
  • Синий: в нем содержатся приложения другого типа
  • Красный: здесь хранится наш «общий» вспомогательный код

RED

RED содержит весь наш общий вспомогательный код - библиотеки DLL, используемые приложениями в GREEN и СИНИЙ. Они доступны в виде пакетов NuGet.

В разделе Артефактов RED мы видим «канал организационной области», называемый «OurCompany». Мы поняли, что не можем использовать это, потому что эти пакеты NuGet должны быть доступны каждому в OurCompany, что означает не только на Azure, но и на наших компьютерах DeskTop в нашей корпоративной сети (где мы запускаем Visual Studio). «Я не думаю, что« канал организации »имеет отношение к нашей корпоративной сети.

Поэтому мы создали новый канал в соответствии с артефактами RED. При просмотре разрешений я вижу следующие записи:

  • {me}: (Владелец)
  • [OurCompany] \ Администраторы коллекций проектов: (Владелец)
  • [RED] \ Администраторы проекта: (Владелец)
  • Служба сборки RED (OurCompany): (Автор)
  • Служба сборки коллекции проектов (OurCompany): (Участник)
  • [ RED] \ Contributors (Contributor)

Corporate

Итак, вернувшись в Corporate, мы добавляем фид пакетов NuGet в нашу Visual Studio и затем пакеты NuGet по сравнению с Azure.

ЗЕЛЕНЫЙ и СИНИЙ

Здесь у нас есть наши продукты. Мы создаем конвейер сборки и добавляем шаг восстановления NuGet:

- task: NuGetCommand@2
  displayName: 'Restore for Our Application'
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'
    vstsFeed: '{Guid1}/{Guid2}'

Две гида были заполнены, когда мы пикетировали фид Azure Artifacts из выпадающего списка.

ЗЕЛЕНЫЙ или СИНИЙ сбой восстановления NuGet

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

Unable to find version 'nnnn.n.n' of package 'TheNuGetPackage'.

Вывод журнала огромен, но характерные строки выглядят так:

2020-02-18T18:36:35.2838118Z [command]C:\hostedtoolcache\windows\NuGet\5.4.0\x64\nuget.exe sources Add -NonInteractive -Name {Guid2} -Source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json
-ConfigFile d:\a\1\Nuget\tempNuGet_356.config 2020-02-18T18:36:35.7513495Z Package source with Name: {Guid2} added successfully. 2020-02-18T18:36:41.1671856Z     [CredentialProvider.183638]Command-line v0.1.20+a5d37185a1a95acb4f0g997b9c23cab99508: "d:\a\_tasks\NuGetCommand_333b11bd-d341-40d9-bdbd-b32d5ce6f23b\2.164.0\CredentialProviderV2\plugins\netfx\CredentialProvider.Microsoft\CredentialProvider.Microsoft.exe"
-Plugin 2020-02-18T18:36:41.1673979Z     [CredentialProvider]Handling 'Request' 'GetAuthenticationCredentials'. Time elapsed in ms: 3 - Payload: {"Uri":"https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json","IsRetry":false,"IsNonInteractive":true,"CanShowDialog":true} 2020-02-18T18:36:41.1674299Z     [CredentialProvider]Handling auth request, Uri: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json, IsRetry: False, IsNonInteractive: True, CanShowDialog: True 2020-02-18T18:36:41.1674465Z     [CredentialProvider]URI: https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1674818Z     [CredentialProvider]Skipping NuGetCredentialProvider.CredentialProviders.VstsBuildTaskServiceEndpoint.VstsBuildTaskServiceEndpointCredentialProvider, cannot provide credentials for https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1675261Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675425Z     [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1675722Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676021Z    [CredentialProvider]VstsBuildTaskCredentialProvider - https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676161Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Matched prefix: https://pkgs.dev.azure.com/OurCompany/ 2020-02-18T18:36:41.1676330Z    [CredentialProvider]VstsBuildTaskCredentialProvider - Found credentials for endpoint https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json 2020-02-18T18:36:41.1680820Z   https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json: Unable to load the service index for source https://pkgs.dev.azure.com/OurCompany/{Guid1}/_packaging/{Guid2}/nuget/v3/index.json. 2020-02-18T18:36:41.1680996Z   Response status code does not indicate success: 404 (Not Found - VS800075: The project with id 'vstfs:///Classification/TeamProject/{Guid1}' does not exist, or you do not have permission to access it. (DevOps Activity ID: 0628EDE7-6E7E-465D-A6AE-7B6B0AA065D2)).

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

Я попытался добавить разрешения для канала в RED. Нажав на кнопку «Добавить пользователей / группы». Я нашел следующее и добавил их в качестве читателя или участника, но безуспешно.

  1. [ЗЕЛЕНЫЙ] \ Green Team
  2. GREEN Build Services

Итак:

  1. Я поступаю неправильно? Если так, что я должен делать (я думал, что довольно точно следовал инструкциям Azure DevOps)
  2. Правильно ли я поступаю? Если так, что я пропустил?

Обновление # 1

Подробное сообщение об ошибке с шага восстановления

https://api.nuget.org/v3/index.json: Пакет 'Package1.nnnn.nn' не найден в источнике 'https://api.nuget.org/v3/index.json'.
https://pkgs.dev.azure.com/OurCompany/ {Guid1} / _ package / {Guid2} /nuget/v3/index.json: невозможно загрузить индекс службы для источника https://pkgs.dev.azure.com/OurCompany/ {Guid1} / _ packaging / {Guid2} /nuget/v3/index.json , Код состояния ответа не указывает на успех: 404 (Не найдено - VS800075: проект с идентификатором 'vstfs: /// Classification / TeamProject / {Guid1}' не существует, или у вас нет разрешения на доступ к нему. (Операция DevOps ID: {Guid})).

Ответы [ 3 ]

6 голосов
/ 24 февраля 2020

Наконец-то я нашел проблему. Интересно, если это ошибка, или она плохо документирована ... (или, может быть, я ее неправильно истолковал).

В соответствии с предложением Лео Луи-MSFT выше (задокументировано Microsoft), я Я добавил разрешения в канал NuGet, и это не сработало. Тем не менее, я был заинтригован его предложением:

Если вы изменили свои сборки для запуска в рамках проекта

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

Так что в моем примере выше, СИНИЙ и ЗЕЛЕНЫЙ - это два проекта, которые пытаются использовать пакет NuGet в канале Артефакта RED.

Итак, выбрав СИНИЙ (или ЗЕЛЕНЫЙ), в нижнем левом углу Azure DevOps вы увидите ссылку «Настройки проекта». В разделе «Конвейеры> Настройки» есть четыре настройки. Нам пришлось изменить следующее:

Ограничить область авторизации заданий текущим проектом = false

Надеюсь, это поможет!

3 голосов
/ 20 февраля 2020

Azure Конвейер проекта DevOps не может получить доступ к каналу артефактов в другом проекте

Я думаю, вы идете правильным путем. Существует известная проблема о фиде области проекта.

В качестве документа Разрешения пакетов в Azure Конвейеры указано:

Чтобы использовать пакеты из фида в Azure Конвейеры, соответствующий идентификатор сборки должен иметь разрешение на ваш канал. По умолчанию служба сборки коллекций проектов является участником. Если вы изменили свои сборки для запуска в области проекта, вам нужно будет добавить удостоверение сборки уровня проекта в качестве читателя или участника , если необходимо. Идентификатор сборки на уровне проекта называется следующим образом:

[Имя проекта] Служба сборки ([Название организации]) (например, Служба сборки FabrikamFiber (codeharing-demo))

enter image description here

Вы можете проверить эту ветку для более подробной информации.

Надеюсь, это поможет.

1 голос
/ 24 февраля 2020

В моем LibsProject у меня есть LibsFeed (OP RED ), который я хотел использовать в конвейере в моем ConsumingProject .

Мне пришлось добавить следующие разрешения, чтобы заставить его работать:

  • LibsFeed : Добавить Служба построения ConsumingProject в качестве участника ( Чтение автоматически изменено на Участника каким-либо образом)
  • LibsProject : Добавить ConsumingProject Team в LibsProject Team в LibsProject -> Настройки проекта -> Команда

Я даже не могу включить решение OP, даже при всех мыслимых правах администратора

Ограничить область авторизации заданий текущим проектом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...