首页 > 解决方案 > 在 Jenkins 构建 Azure DevOps 工件源中的包期间,Nuget 还原返回 401 未经授权

问题描述

我们有一个在 Jenkins 中工作的 CI 构建。我们在 Azure DevOps 中有一个NuGet 包源401 Unauthorized,在构建期间还原 NuGet 包时出现错误:

https://pkgs.dev.azure.com/X/_packaging/FeedName@Release/nuget/v3/index.json:无法加载源https://pkgs.dev.azure.com/X/的服务索引_packaging/FeedName@Release/nuget/v3/index.json。响应状态码不表示成功:401(未授权)。

詹金斯设置:

我在 Jenkins 机器上安装了 NuGet Credential Provider,但我在以自己身份登录时安装了它。我复制了我在笔记本电脑上采取的步骤来解决同样的问题。我的笔记本电脑正在工作。Jenkins 服务器不是,我认为这与 NuGet Credential Provider 不适用于“本地系统”帐户有关,但不知道如何解决这个问题。

构建由 PowerShell 脚本控制,NuGet 恢复命令如下所示:

& "$solutionPath"\.nuget\NuGet.exe restore "$solutionFile"

在阅读了如何在 VSTS nuget restore 中为外部 nuget 提要指定凭据后,我还通过以下方式向本地 NuGet 安装添加了一个新的“源”:

.\.nuget\NuGet.exe sources add -name "FeedName" -source "https://pkgs.dev.azure.com/X/_packaging/FeedName@Release/nuget/v3/index.json" -username <my username> -password <my personal access token> -configfile .\.nuget\NuGet.config

我试过的用户名:

-password参数是具有 Azure DevOps 工件源的读/写权限的个人访问令牌的复制和粘贴。

但同样,当我这样做时,我被远程访问了 Jenkins 机器作为我的用户名,我仍然遇到同样的问题。

401 Unauthorized当包来自 Azure DevOps 工件 NuGet 源时,如何在 Jenkins 构建期间还原 NuGet 包时进行修复?

标签: jenkinsazure-devopscontinuous-integrationnugetazure-artifacts

解决方案


尝试使用个人访问令牌 (PAT) 的名称作为用户名。这是您在创建 PAT 时为其指定的名称。

编辑.nuget/NuGet.config并添加以下代码:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <packageSources>
    <add key="MyPackages" value="https://pkgs.dev.azure.com/OrganizationName/_packaging/FeedName@Release/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <!-- Tag name 'MyPackages' matches 'key' attribute under packageSources -->
    <MyPackages>
      <!-- Username is the name you gave your Personal Access Token in Azure -->
      <add key="Username" value="NameOfPersonalAccessToken" />

      <!-- Choose one of the tags below: -->

      <!-- Use Password if PAT is encrypted -->
      <add key="Password" value="EncryptedPersonalAccessTokenGoesHere" />

      <!-- Use ClearTextPassword if PAT is encrypted -->
      <add key="ClearTextPassword" value="PlainTextPersonalAccessTokenGoesHere" />
    </MyPackages>
  </packageSourceCredentials>
</configuration>

更多信息:https ://docs.microsoft.com/en-us/nuget/reference/nuget-config-file#packagesourcecredentials


推荐阅读