Azure Pipelines托管代理无法访问DevOps项目供稿

时间:2018-09-17 00:42:09

标签: azure-devops azure-pipelines azure-pipelines-build-task azure-artifacts

我有一个Azure DevOps项目(仅一个)。

我将构建管道设置为在“托管VS2017”代理程序池中运行。该代理程序池似乎位于[MyProject] \ Build管理员,贡献者,项目管理员和发布管理员角色中。

在DevOps项目中,我还有一个Artifacts nuget提要。它具有[MyProject] \ Project有效用户设置为“读取者”角色。看来项目有效用户具有上述成员的所有代理池角色。

我有一个添加的azure-pipelines.yml脚本,它在开始时就将工件提要添加为nuget源:

# Add nuget source
- powershell: Invoke-RestMethod "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "$env:UserProfile/nuget.exe"
- script: '%UserProfile%\nuget.exe sources Add -Name "devops" -Source "https://pkgs.dev.azure.com/MyProject/_packaging/feed/nuget/v3/index.json"'

然后,构建yml点缀一个dotnet build,但在NuGet.targets内部却失败了,

Unable to load the service index for source https://pkgs.dev.azure.com/MyProject/_packaging/feed/nuget/v3/index.json.
Response status code does not indicate success: 401 (Unauthorized).

我该如何进行这项工作?我的构建需要该工件供稿上其他构建的软件包...

3 个答案:

答案 0 :(得分:1)

使用built-in tasks安装和运行NuGet,不会出现身份验证问题。

答案 1 :(得分:1)

使用dotnet任务的restore命令。如果您使用的是单个Azure Artifacts提要,只需从任务的下拉列表中选择它即可(而不是您提到的PowerShell)。如果有多个提要(看起来不是问题,但以防万一),则需要检入引用所有提要的NuGet.config,然后将任务指向该配置。

您可能还需要将'--no-restore'标志传递给'dotnet build'命令。

如果仍然遇到问题,请确保correct build identity可以访问您的供稿。

答案 2 :(得分:1)

有一个更好的替代imo。您可以继续使用脚本来dotnet restore。 只需在NuGetAuthenticate@0

之前添加一个任务即可
steps:
- task: NuGetAuthenticate@0
- script: dotnet restore --no-cache --force

此任务将使用NuGet.config文件中需要的nuget feed对管道进行身份验证。

More info here

请注意,当nuGet提要位于Azure DevOps中时,则不需要任何其他操作。如果提要是外部的,则可以在Azure DevOps上配置nuGet服务连接(在链接上有更多信息)。