我正在开发 Azure DevOps 管道。我们最近开始将模块包发布到工件源,新项目使用
<PackageReference>
将这些模块导入为 NuGet 包。
现在我们管道中的构建步骤无法加载 NuGet 包。
Starting: Build
==============================================================================
Task : .NET Core
Description : Build, test, package, or publish a dotnet application, or run a custom dotnet command
Version : 2.221.0
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli
==============================================================================
C:\Windows\system32\chcp.com 65001
Active code page: 65001
Info: .NET Core SDK/runtime 2.2 and 3.0 are now End of Life(EOL) and have been removed from all hosted agents. If you're using these SDK/runtimes on hosted agents, kindly upgrade to newer versions which are not EOL, or else use UseDotNet task to install the required version.
C:\hostedtoolcache\windows\dotnet\dotnet.exe build "-dl:CentralLogger,\"D:\a\_tasks\DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b\2.221.0\dotnet-build-helpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll\"*ForwardingLogger,\"D:\a\_tasks\DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b\2.221.0\dotnet-build-helpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll\"" --configuration Release
MSBuild version 17.3.2+561848881 for .NET
Determining projects to restore...
##[error]MyApp\MyModule\MyModule.csproj(0,0): Error NU1301: Unable to load the service index for source https://pkgs.dev.azure.com/MyOrg/MyProj/_packaging/MyFeed/nuget/v3/index.json.
D:\a\1\s\MyApp\MyModule\MyModule.csproj : error NU1301: Unable to load the service index for source https://pkgs.dev.azure.com/MyOrg/MyProj/_packaging/MyFeed/nuget/v3/index.json. [D:\a\1\s\MySolution.sln]
...
运行不会显式失败,它只是一遍又一遍地重新尝试从提要加载,直到我取消管道(我让它运行两倍于通常的构建时间,以确保它不只是花费比预期更长的时间).
这是我直到失败的构建步骤的管道:
trigger:
- "none"
pool:
vmImage: 'windows-2022'
variables:
buildConfiguration: 'Release'
dotNetFramework: 'net6.0'
dotNetVersion: '6.0.x'
steps:
- task: UseDotNet@2
inputs:
version: $(dotNetVersion)
- task: DotNetCoreCLI@2
displayName: 'Restore dotnet tools'
inputs:
command: custom
custom: 'tool'
arguments: 'restore'
- task: DotNetCoreCLI@2
displayName: 'Generate license info file using dotnet-project-licenses'
inputs:
command: custom
custom: 'tool'
arguments: 'run dotnet-project-licenses -i "." -u -o --outfile "./licenses.txt" --packages-filter "/My.*/"'
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
arguments: --configuration $(buildConfiguration)
这是我使用的 nuget.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="DevExpress" value="https://nuget.devexpress.com/<api-key>/api" />
<add key="Kalisto" value="https://pkgs.dev.azure.com/MyOrg/MyProj/_packaging/MyFeed/nuget/v3/index.json" />
</packageSources>
</configuration>
我知道提要 URL 是正确的,因为我可以在 IDE 中恢复解决方案。不幸的是,我没有获得有关管道运行中出现问题的更多信息,但我怀疑这可能是授权问题。
项目构建服务用户也具有对 feed 的贡献者访问权限。同一用户还发布了模块,因此这不应该是问题。
我尝试了这个答案但没有成功。我使用的 PAT 是我的个人令牌,具有对工件的读取权限。
现在我已经没有办法解决这个问题了。
错误 NU1301:无法加载源的服务索引 https://pkgs.dev.azure.com/MyOrg/MyProj/_packaging/MyFeed/nuget/v3/index.json。
根据错误信息,需要检查Feed和Pipeline是否在同一个Project中。
如果是在不同的项目中,您可以参考以下步骤解决问题:
1.检查Build Service帐号的权限(项目级别和集合级别)。
步骤如下:
第 1 步:导航至 Artifacts -> 目标 Feed -> Feed 设置 -> 权限。
Step2:授予构建服务帐户贡献者角色。构建服务帐户名称:
ProjectnamethePipelinelocated Build Service (Organization name)
和Project Collection Build Service(Orgname)
例如:
2.如果Feed和Pipeline在不同的项目中,需要disable,
Limit job authorization scope to current project for non-release pipelines
选项在Project Settings -> Settings中启用。
例如:
注意: 要禁用此选项,您需要先禁用
Organization Settings-> Settings
中的选项。然后您可以在项目级别禁用该选项。
另一方面,如果您想使用个人 PAT 来验证 feed,可以将 PAT 添加到 nuget.config 文件中。
例如:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
<add key="test1" value="https://pkgs.dev.azure.com/xx/xx/_packaging/xx/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<test1>
<add key="Username" value="123" />
<add key="Password" value="based64PAT" />
</test1>
</packageSourceCredentials>
</configuration>
请参阅文档:packageSourceCredentials