web-dev-qa-db-ja.com

Azure DevOpsプロジェクトパイプラインが別のプロジェクトのアーティファクトフィードからNuGetパッケージにアクセスできない

2020年2月20日更新

まとめ

Azure DevOpsパイプラインビルドで、Artifactsの下のプライベートフィードからNuGetパッケージが見つかりません。

Azure DevOps環境

Azureには、「スペース」という会社があります。dev.Azure.com/ OurCompany

その下には複数のプロジェクトがあるので、たとえば次の3つを想像してください。

  • 緑:これは特定のタイプのアプリケーションを保持します
  • 青:これは異なるタイプのアプリケーションを保持します
  • 赤:これは「共通」のヘルパーコードを保持します

[〜#〜]赤[〜#〜]

REDには、すべての一般的なヘルパーコードが、GREENおよびBLUEのアプリケーションによって使用されるDLLであることが保持されています。これらはNuGetパッケージとして提供されます。

REDのアーティファクトの下に、「OurCompany」という「組織スコープフィード」が表示されます。これらのNuGetパッケージはOurCompanyのすべてのユーザーが使用できる必要があるため、これを使用できないことがわかりました。これは、Azureだけでなく、企業ネットワーク(Visual Studioを実行している)のデスクトップコンピューターでも使用できることを意味します。 「組織スコープフィード」は私たちの企業ネットワークに公開されていないと思います。

したがって、REDのアーティファクトの下に新しいフィードを作成しました。アクセス許可を表示すると、次のエントリが表示されます。

  • {me}:(所有者)
  • [OurCompany]\Project Collection Adminstrators:(所有者)
  • [RED]\Project Administrators:(所有者)
  • RED Build Service(OurCompany):(寄稿者)
  • プロジェクトコレクションビルドサービス(OurCompany):(寄稿者)
  • [RED]\Contributors(寄稿者)

Corporate

したがって、Corporateに戻って、NuGetパッケージフィードをVisual Studioに追加すると、AzureからNuGetパッケージを取得できます。

緑と青

ここに私達の製品があります。ビルドパイプラインを作成し、NuGet復元ステップを追加します。

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

ドロップダウンからAzure Artifactsフィードを選択すると、2つのGuidが入力されました。

緑または青の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. [緑] \緑のチーム
  2. グリーンビルドサービス

そう:

  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}/_packaging/{Guid2} /nuget/v3/index.json:サービスインデックスをロードできませんソース https://pkgs.dev.Azure.com/OurCompany/ {Guid1}/_packaging/{Guid2} /nuget/v3/index.json。応答ステータスコードが成功を示さない:404(見つかりません-VS800075:ID 'vstfs:/// Classification/TeamProject/{Guid1}'のプロジェクトが存在しないか、アクセスする権限がありません(DevOpsアクティビティID:{Guid}))。

4
DrGriff

私のLibsProjectにはLibsFeed(OP's [〜#〜] red [〜#〜])があり、それを私のパイプラインConsumingProject

これを機能させるには、次の権限を追加する必要がありました。

  • LibsFeed:追加ConsumingProject Build Serviceをコントリビューターとして追加(何らかの方法で自動的にコントリビューターに変更された読み取り)
  • LibsProjectLibsProject TeamLibsProjectConsumingProject Teamを追加->プロジェクト設定->チーム

考えられるすべての管理者権限があっても、OPのソリューションを有効にすることさえできません

ジョブの承認範囲を現在のプロジェクトに制限する

1
Heinzlmaen