当前位置: 首页 > 知识库问答 >
问题:

Azure 开发运营项目管道无法从不同项目中的项目源访问 NuGet 包

高飞翮
2023-03-14

更新日期:2020年2月20日

总结

Azure 开发运营管道生成无法从“项目”下的专用源中找到 NuGet 包。

我们的 Azure DevOps 环境

在Azure,我们有自己的公司“空间”:dev.azure.com/OurCompany

在此之下,我们有多个项目,例如,想象一下这三个项目:

  • 绿色:包含特定类型的应用程序
  • 蓝色:这包含不同类型的应用程序
  • 红色:这包含我们的“通用”帮助程序代码

红色

RED 保存我们所有常见的帮助程序代码,这些代码都是应用程序以绿色和蓝色使用的 DLL。这些包可用作 NuGet 包。

在RED的工件下,我们看到了一个名为“OurCompany”的“组织范围提要”。我们知道我们不能使用它,因为这些NuGet包需要对OurCompany中的每个人都可用,这意味着不仅在Azure上,而且在我们公司网络(我们在其中运行Visual Studio)中的DeskTop机器上。我认为“组织范围提要”不会暴露给我们的公司网络。

因此,我们在 RED 的工件下创建了一个新的源。当我查看“权限”时,我看到以下条目:

  • {我} : (所有者)
  • [我们的公司]\项目收集管理员 : (所有者)
  • [红色]\项目管理员 :(所有者)
  • RED 构建服务(我们的公司):(贡献者)
  • 项目集合构建服务(我们的公司):(贡献者)
  • [红色]\贡献者(贡献者)

企业

因此,回到企业版中,我们将 NuGet 包源添加到我们的可视化工作室,然后它可以从 Azure 中提取 NuGet 包。

绿色和蓝色

在这里,我们有我们的产品。我们创建一个生成管道,并添加一个 NuGet 还原步骤:

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

这两个Guids是在我们从下拉列表中抽取Azure工件提要时填充的。

绿色或蓝色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)).

对我来说,这看起来像是权限问题。但奇怪的是,在创建Pipeline Build YAML时,可以发现RED中的神器提要,而我们没有使用它的权限。

我确实尝试过给红色的提要添加权限。点击“添加用户/组”。我找到了以下内容,并将其添加为读者或投稿人,但没有成功。

  1. [GREEN]\绿色团队
  2. 绿色构建服务

因此:

  1. 我是不是走错了路?如果是这样,我应该怎么做(我想我已经相当严格地遵循了Azure运营模式的说明)
  2. 我这样做是对的吗?如果是,我错过了什么?

更新#1

还原步骤中的详细错误消息

https://api.nuget.org/v3/index.json:在源“https://api.nuget.org/v3/index.json”上找不到包“包1.nn.n.n”。
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}”的项目不存在,或者您没有访问它的权限。(开发运营活动 ID:{指南})。

共有3个答案

计弘
2023-03-14
    < li >从以下选项中选择:送纸设定
汪明德
2023-03-14

Azure DevOps项目管道无法访问不同项目中的项目源

我认为你走的是正确的道路。存在有关项目范围源的已知问题。

如文档中所述,Azure 管道中的包权限:

若要在 Azure 管道中使用源中的包,相应的生成标识必须具有对源的权限。默认情况下,项目集合生成服务是参与者。如果已将生成更改为在项目范围内运行,则需要根据需要将项目级生成标识添加为“读者”或“参与者”。项目级生成标识的命名如下:

[项目名称]Build Service([组织名称])(例如FabrikamFiber Build Service(代码共享-演示))

您可以查看此线程以获取更多详细信息。

希望这有帮助。

丌官淇
2023-03-14

最后,我发现了问题所在。我想知道这是一个错误,还是只是记录得很差....(或者也许我只是没有正确解释它)。

根据Leo Lui-MSFT上面的建议(由Microsoft记录),我已经将权限添加到NuGet提要中,但这并不起作用。然而,我对他的句子很感兴趣:

如果您已经将构建更改为在项目范围内运行

就我个人而言,我没有,所以我和我们的系统管理员联系,我们检查了所有可能的设置。最终,我们找到了它——这不是我有能力改变的事情。

所以在我上面的例子中,BLUE和GREEN是两个尝试在RED的工件提要中使用NuGet包的项目。

所以选择蓝色(或绿色),在Azure DevOps的左下角你会看到一个链接“项目设置”。在“管道”下

将工作授权范围限制到当前项目= false

希望这有帮助!

 类似资料:
  • Azure 开发运营服务器 2020,在其他服务器上具有自承载代理 我有一个构建,它正在Azure工件中创建工件,然后触发了一个发布管道,该管道应该下载此工件并对其执行某些操作。以前,构建的输出是在文件共享上,它按预期工作。当我切换到Azure工件时,下载工件任务(由Azure运营模式自动添加)失败,如下所示: 所有其他构建任务在此服务器上工作都没有问题,此发布管道在其他服务器上也可以正常工作。当

  • 问这个问题的另一种方法是: 如何使用Azure个人访问令牌验证项目,以便maven build可以下载发布在

  • 我有一个在云中运行的azure管道,在那里,我基本上想运行黑鸭扫描。为了简化操作,黑鸭任务运行 maven 命令来构建依赖关系树。为了做到这一点,它会扫描我的pom.xml中的所有依赖关系。 我目前在Azure DevOps上有2个feeds。1个用于存储外部库,1个用于存储内部开发内部库。所有外部的依赖项,maven命令都能够检索,但是内部的依赖项不能。我一直得到一个401未授权的错误。 我已经

  • 问题内容: 如何从项目管道访问settings.py中的scrapy设置。文档中提到可以通过扩展程序中的搜寻器访问它,但是我看不到如何在管道中访问搜寻器。 问题答案: 从内部访问Scrapy设置(如中所定义)的方法很简单。所有其他答案都太复杂了。原因是对Scrapy文档的维护非常差,加上许多最新的更新和更改。在“设置”文档“ 如何访问设置 ”中,或者在“设置API”中,都没有给出任何可行的示例。这

  • 本章介绍 Docker 开源的项目。随着 Docker 功能的越来越多,Docker 也加快了开源的步伐,Docker 未来会将引擎拆分为更多开放组件,对用于组装 Docker 产品的各种新型工具与组件进行开源并供技术社区使用。

  • 我正在尝试为Angular应用程序设置CI/CD管道。我从一个教程中获得了灵感(真遗憾,我关闭了浏览器选项卡,忘记在代码中添加kudo注释),但最终安排这样做: 问题发生在部署阶段。 理想情况下,我已经创建了一个zip工件来使用 然后,在部署阶段检索该项目 但这会在中下载一个与