DrG*_*iff 14 nuget-package-restore devops azure-devops azure-pipelines azure-artifacts
2020 年 2 月 20 日更新
概括
Azure DevOps 管道构建无法从我们在 Artifacts 下的私有源中找到 NuGet 包。
我们的 Azure DevOps 环境
在 Azure 中,我们有我们的公司“空间”:dev.azure.com/OurCompany
在此之下,我们有多个项目,例如,想象一下这三个:
红色的
RED 保存了我们所有常见的帮助程序代码,这些代码都是 GREEN 和 BLUE 应用程序使用的 DLL。这些以 NuGet 包的形式提供。
在 RED 的 Artifacts 下,我们看到了一个名为“OurCompany”的“组织范围提要”。我们知道我们不能使用它,因为这些 NuGet 包需要对 OurCompany 中的每个人可用,这意味着不仅在 Azure 上,而且在我们公司网络(我们运行 Visual Studio 的地方)中的桌面计算机上。我认为“组织范围内的提要”不会暴露给我们的企业网络。
因此,我们在 RED 的 Artifacts 下创建了一个新的 Feed。当我查看权限时,我看到以下条目:
公司的
因此,回到 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}'
Run Code Online (Sandbox Code Playgroud)
当我们从下拉菜单中选择 Azure Artifacts 提要时,这两个 Guid 就被填充了。
绿色或蓝色 NuGet 还原失败
所以这就是我们遇到问题的地方。当 NuGet 还原步骤执行时,它失败并显示以下消息:
Unable to find version 'nnnn.n.n' of package 'TheNuGetPackage'.
Run Code Online (Sandbox Code Playgroud)
日志输出很大,但突出的几行似乎是:
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)).
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来像是权限问题。但奇怪的是,当我们没有权限使用它时,在创建管道构建 YAML 时可以发现 RED 中的 Artifact Feed。
我确实尝试在 RED 中为 Feed 添加权限。单击“添加用户/组”。我找到了以下内容并将它们添加为读者或贡献者,但没有成功。
所以:
更新 #1
还原步骤中的详细错误消息
https://api.nuget.org/v3/index.json:在源“ https://api.nuget.org/v3/index.json ”上找不到包“Package1.nnnn.nn ”。
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 Activity) ID:{Guid}))。
DrG*_*iff 34
终于,我找到了问题所在。我想知道这是否是一个错误,或者只是记录不佳......(或者我可能只是没有正确解释它)。
根据上面 Leo Lui-MSFT 的建议(由 Microsoft 记录),我已将权限添加到 NuGet 提要,但这不起作用。然而,我对他的话很感兴趣:
如果您已将构建更改为在项目范围内运行
就我个人而言,我没有,所以我找了我们的系统管理员,我们完成了所有可能的设置。最终,我们找到了它——这不是我有能力改变的。
因此,在我上面的示例中,BLUE 和 GREEN 是尝试在 RED 的 Artifact 提要中使用 NuGet 包的两个项目。
因此,选择蓝色(或绿色),在 Azure DevOps 的左下角,您将看到“项目设置”链接。在“管道 > 设置”下有四个设置。我们必须将以下内容更改为:
将工作授权范围限制为当前项目 = false
希望有帮助!
Azure DevOps 项目管道无法访问不同项目中的工件源
我认为你走对了路。项目范围提要存在已知问题。
正如Azure Pipelines 中的文档包权限所述:
若要在 Azure Pipelines 中使用源中的包,相应的生成标识必须具有对源的权限。默认情况下,项目集合构建服务是一个贡献者。如果您已将构建更改为在项目范围内运行,则需要根据需要将项目级构建标识添加为 Reader 或 Contributor。项目级构建标识命名如下:
[项目名称] 构建服务([组织名称])(例如 FabrikamFiber 构建服务(代码共享演示))
您可以查看此线程以获取更多详细信息。
希望这可以帮助。
归档时间: |
|
查看次数: |
5853 次 |
最近记录: |