jenkins - 在 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(未授权)。
詹金斯设置:
- 视窗 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 文件的确切文件名
在阅读了如何在 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
我试过的用户名:
- 我的实际用户名
- 我的电子邮件
- 就像
.
Jenkins 配置在通过 TFVC 获取最新版本的代码时需要使用 Azure DevOps 进行身份验证一样
该-password
参数是具有 Azure DevOps 工件源的读/写权限的个人访问令牌的复制和粘贴。
但同样,当我这样做时,我被远程访问了 Jenkins 机器作为我的用户名,我仍然遇到同样的问题。
401 Unauthorized
当包来自 Azure DevOps 工件 NuGet 源时,如何在 Jenkins 构建期间还原 NuGet 包时进行修复?
解决方案
尝试使用个人访问令牌 (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
推荐阅读
- api - Google Calendar API:来自referer http://localhost 的请求被阻止
- python - 我们如何根据条件创建具有多个输出的 pytorch 模型?
- python - 在Python中,有没有办法通过直接访问类对象而不指定object.attribute来返回特定的属性值?
- ios - 测试依赖注入
- node.js - 有没有办法列出目录 node.js 中所有文件的文件扩展名?
- c++ - 来自 C++ SDK 的 IF 语句措辞不正确
- python - 如何让我的项目在重新启动后记住变量/列表?
- javascript - 图像滑块需要额外单击 1 次才能重置。无法修复
- google-apps-script - 电子邮件通知中出现错误“异常:单元格引用超出范围”
- javascript - 如何设置在线服务器以不断执行我的 javascript 代码?