在 Azure DevOps YAML 管道中进行身份验证以访问我的 Azure DevOps 包提要的最佳方式(由 Paket 命令使用)

Best way to authenticate in Azure DevOps YAML pipeline to access my Azure DevOps package feed (used by Paket commands)

当通过命令行步骤调用 Paket 安装时,脚本在尝试访问我的 Azure DevOps 包提要(使用上游源)时发出未经授权的异常 (401)。

运行 我本地系统上的构建步骤使用 Git 凭据管理器登录并进行身份验证,以便通过我的 Azure DevOps 包提要解析和发布包。

我的目标是无需在 Azure DevOps Yaml 脚本文件中指定纯用户名和密码的解决方案。 到目前为止,我已经尝试使用 "az devops login" 命令通过私有访问令牌进行身份验证,但直到现在我都没能得到它 运行.

我还阅读了有关 Azure DevOps 的内容"Service connections",但这对我的问题来说似乎有些过分了。

没有身份验证逻辑的 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)

我经常这样做,它允许你使用本地身份验证,所以你不必在 nuget.config:

中配置身份验证
- task: DotNetCoreCLI@2
  displayName: Dotnet restore
  inputs:
    command: restore
    projects: '$(Parameters.RestoreBuildProjects)'
    feedsToUse: select
    vstsFeed: feed_name_goes_here

Best way to authenticate in Azure DevOps YAML pipeline to access my Azure DevOps package feed (used by Paket commands)

如果您不想在 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”,如果你用 nuget.config清除PAT,所以最好在variables选项卡中创建变量来存储PAT,并将变量类型更改为secret。

希望对您有所帮助。

唯一可行的方法是通过 Paket.dependencies 文件传递​​令牌,例如

框架:netstandard2.0、netcoreapp2.2 策略:最大 存储:none 来源 https://worues.pkgs.visualstudio.com/_packaging/Fact4CoreFeed/nuget/v3/index.json 用户名:"anonymous" 密码:“” ...

当将令牌访问权限从完全切换回 Read/Write 包提要权限时,它仍然有效。不知道为什么它一开始就没有。

感谢您的帮助