【问题标题】:Nuget restore returns 401 unauthorized during Jenkins build for packages in Azure DevOps artifacts feed在 Jenkins 构建 Azure DevOps 工件源中的包期间,Nuget 还原返回 401 未经授权
【发布时间】:2019-10-31 11:51:21
【问题描述】:

我们有一个在 Jenkins 中运行的 CI 构建。我们在 Azure DevOps 中有一个 NuGet 包源,在构建期间恢复 NuGet 包时出现401 Unauthorized 错误:

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 设置:

  • Windows 10
  • 詹金斯 2.199
  • NuGet 5.3.1.6268
  • Java 1.8.0_191
  • Jenkins 作为登录到“本地系统”的 Windows 服务运行。

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

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

& "$solutionPath"\.nuget\NuGet.exe restore "$solutionFile"
  • $solutionPath 是 Visual Studio 的 .sln 文件所在的文件夹
  • $solutionFile 是 .sln 文件的确切文件名

在阅读How to specify credentials for external nuget feeds in VSTS nuget restore 之后,我还通过以下方式向本地 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

我尝试过的用户名:

  • 我的实际用户名
  • 我的电子邮件
  • 还有 .,就像 Jenkins 配置在通过 TFVC 获取我们的最新版本代码时需要通过 Azure DevOps 进行身份验证

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

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

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

【问题讨论】:

    标签: jenkins azure-devops continuous-integration nuget azure-artifacts


    【解决方案1】:

    尝试使用个人访问令牌 (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

    【讨论】:

    • 希望您不介意,但我已添加到您的答案中。我花了一些时间才把事情做好。希望我添加的信息能帮助其他人,让他们在解决方案上花费更少的时间。
    猜你喜欢
    • 2019-12-27
    • 2020-01-09
    • 2020-11-11
    • 2020-08-06
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-12-24
    • 2016-12-24
    相关资源
    最近更新 更多