更新于2020年2月20日
概述
Azure DevOps的pipeline构建无法从我们存储在Artifacts下的私有feed中找到NuGet软件包。
我们的Azure DevOps环境
在Azure上,我们有我们公司的“space”:dev.azure.com/OurCompany
在此之下,我们有多个项目,例如这三个:
- Green:这是一个特定类型的应用程序集合
- Blue:这是另一种类型的应用程序集合
- Red:这保存了我们的“公共”帮助器代码
RED
RED保存我们所有公共的帮助器代码DLL,这些DLL被GREEN和BLUE中的应用程序所使用。这些DLL以NuGet软件包的形式提供。
在RED的Artifacts下,我们看到一个名为“OurCompany”的“组织范围内的feed”。我们知道不能使用这个,因为这些NuGet软件包需要对OurCompany中的每个人都可用,这意味着不仅要在Azure上,还要在我们公司网络中的桌面机器上(我们在其中运行Visual Studio)。我认为,“组织范围内的feed”没有暴露给我们的公司网络。
因此,我们在RED的Artifacts下创建了一个新的Feed。当我查看权限时,我看到以下条目:
- {me}:(Owner)
- [OurCompany]\Project Collection Adminstrators:(Owner)
- [RED]\Project Administrators:(Owner)
- RED Build Service(OurCompany):(Contributor)
- Project Collection Build Service(OurCompany):(Contributor)
- [RED]\Contributors:(Contributor)
公司网络
回到公司网络,我们将NuGet软件包feed添加到我们的Visual Studio中,然后它就可以从Azure下载NuGet软件包。
GREEN和BLUE
在这里,我们有我们的产品。我们创建了一个构建流程,并添加了一个NuGet还原步骤:
- task: NuGetCommand@2
displayName: 'Restore for Our Application'
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'select'
vstsFeed: '{Guid1}/{Guid2}'
当我们从下拉菜单中选择Azure Artifacts feed时,这两个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)).
我认为这似乎是一个权限问题。但奇怪的是,当我们没有权限使用它时,在创建管道构建 YAML 时发现了 RED 中的工件 Feed。
我尝试在 RED 中添加 Feed 权限。点击“添加用户/组”。我找到以下内容,并将它们添加为 Reader 或 Contributor,但没有成功。
- [GREEN]\ 绿色团队
- GREEN 构建服务
所以:
- 我是不是做错了?如果是这样,我应该做什么(我认为我已经相当仔细地遵循了 Azure DevOps 的说明)
- 我是不是做对了?如果是这样,我错过了什么?
更新 #1
从还原步骤得到详细的错误信息:
https://api.nuget.org/v3/index.json:程序包 'Package1.nnnn.n.n' 在源 '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 Activity ID:{Guid})。