在 Jenkins 构建期间,Nuget 还原返回 401 未经授权,用于 Azure DevOps 工件提要中的包

Gre*_*rdt 2 continuous-integration nuget jenkins azure-devops azure-artifacts

我们有一个在 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(未授权)。

詹金斯设置:

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

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

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

& "$solutionPath"\.nuget\NuGet.exe restore "$solutionFile"
Run Code Online (Sandbox Code Playgroud)
  • $solutionPath 是 Visual Studio 的 .sln 文件所在的文件夹
  • $solutionFile 是 .sln 文件的确切文件名

在阅读如何在 VSTS nuget restore 中为外部 nuget feeds 指定凭据后,我还通过以下方式向本地 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
Run Code Online (Sandbox Code Playgroud)

我试过的用户名:

  • 我的真实用户名
  • 我的电子邮件
  • 而就.,像詹金斯的配置需要与Azure中的DevOps认证通过TFVC获取最新版本的我们的代码时

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

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

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

小智 6

尝试使用个人访问令牌 (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>
Run Code Online (Sandbox Code Playgroud)

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

  • 希望你不介意,但我添加了你的答案。我花了一些时间才把事情做好。希望我添加的信息能够帮助其他人,这样他们就可以减少在解决方案上花费的时间。 (2认同)