0

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

在我的本地系统上运行构建步骤可以使用 Git Credentials Manager 登录并进行身份验证,以通过我的 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)
4

3 回答 3

0

我经常这样做,它允许您使用本机身份验证,因此您不必在 nuget.config 中配置身份验证:

- task: DotNetCoreCLI@2
  displayName: Dotnet restore
  inputs:
    command: restore
    projects: '$(Parameters.RestoreBuildProjects)'
    feedsToUse: select
    vstsFeed: feed_name_goes_here
于 2019-08-10T06:08:56.597 回答
0

在 Azure DevOps 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”,如果您使用nuget.config明确的 PAT 保存,这是一个糟糕的想法和安全问题,因此最好创建变量以将 PAT 存储在变量选项卡中并将变量类型更改为秘密。

希望这可以帮助。

于 2019-08-12T08:32:07.427 回答
0

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

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

将令牌访问权限从完全切换回包提要的读/写权限时,它仍然有效。不知道为什么它没有放在首位。

谢谢你的帮助

于 2019-08-12T20:03:55.540 回答