通过命令行步骤调用 Paket install 时,脚本在尝试访问我的 Azure DevOps 包源(使用上游源(时发出未经授权的异常 (401(。
在本地系统上运行生成步骤的工作原理是使用 Git 凭据管理器登录并进行身份验证,以便通过我的 Azure DevOps 包源解析和发布包。
我的目标是一个解决方案,在该解决方案中,我不必在Azure DevOps Yaml脚本文件中指定纯用户名和密码。 到目前为止,我已经尝试使用"az devops login"命令通过专用访问令牌进行身份验证,但直到现在我都未能让它运行。
我还阅读了有关Azure DevOps"服务连接"的信息,但这似乎对我的问题有些矫枉过正。
没有身份验证逻辑的 Yaml 脚本:
trigger:
- develop
pool:
vmImage: 'windows-latest'
variables:
solution: './*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: CmdLine@2
inputs:
script: 'InstallPackages.cmd'
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
Paket version 5.215.0
Resolving packages for group Main:
Performance:
- Resolver: 544 milliseconds (1 runs)
- Runtime: 111 milliseconds
- Blocked (retrieving package versions): 433 milliseconds (1 times)
- Average Request Time: 57 milliseconds
- Number of Requests: 4
- Runtime: 1 second
Paket failed with
-> Unable to retrieve package versions for 'Microsoft.VisualStudio.Threading.Analyzers'
...
-> Could not load resources from 'https://worues.pkgs.visualstudio.com/_packaging/Fact4CoreFeed/nuget/v3/index.json': Unauthorized (401)
YAML 管道中进行身份验证以访问我的 Azure DevOps 包源(由 Paket 命令使用(
的最佳方式
如果不想在 Azure DevOps Yaml 脚本文件中指定纯用户名和密码,可以通过nuget.config
文件中的专用访问令牌进行身份验证。
示例nuget.config
现在如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
<add key="VSTSFeed" value="https://dev.azure.com/_packaging/FeedName/nuget/v3/index.json " />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
<packageSourceCredentials>
<VSTSFeed>
<add key="Username" value="%USER_VARIABLE%" />
<add key="ClearTextPassword" value="%PAT%" />
</VSTSFeed>
</packageSourceCredentials>
</configuration>
注意:由于密码密钥是"ClearTextPassword
",如果您使用清晰的 PAT 保存nuget.config
,这是一个糟糕的主意和安全问题,因此最好创建变量以在变量选项卡中存储 PAT 并将变量类型更改为 secret。
希望这有帮助。
我通常一直在这样做,它允许您使用本机身份验证,因此您不必在 nuget.config 中配置身份验证:
- task: DotNetCoreCLI@2
displayName: Dotnet restore
inputs:
command: restore
projects: '$(Parameters.RestoreBuildProjects)'
feedsToUse: select
vstsFeed: feed_name_goes_here
唯一有效的方法是通过Paket.dependencies文件传递令牌,例如
框架: NetStandard2.0, NetcoreApp2.2 策略:最大 存储:无 来源 https://worues.pkgs.visualstudio.com/_packaging/Fact4CoreFeed/nuget/v3/index.json 用户名:"匿名"密码:" ...
当将包馈送的令牌访问权限从完全权限切换回读/写权限时,它仍然有效。不知道为什么一开始就没有。
感谢您的帮助