有关我们的设置的一些信息:
所以这已经工作了几个月了(新的部分是我们自己开发的NuGet软件包的软件包提要)。在使用我们的构建服务器的MVC项目中,尝试连接到我们的程序包feed时,NuGet Restore任务失败。失败时,消息为:
http://TFS_URL:8080/tfs/Development/_packaging/CustomNuGetFeed/nuget/v3/index.json: Unable to load the service index for source http://TFS_URL:8080/tfs/Development/_packaging/CustomNuGetFeed/nuget/v3/index.json.
Response status code does not indicate success: 401 (Unauthorized).
这就是构建日志发出的所有信息;我深入研究并启动了WireShark,并得到了以下信息:
请求
GET /tfs/Development/_packaging/CustomNuGetFeed/nuget/v3/index.json HTTP/1.1
user-agent: NuGet Command Line/4.4.1 (Microsoft Windows NT 6.2.9200.0)
X-NuGet-Client-Version: 4.4.1
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Authorization: Basic <base64_token>
Host: tfs:8080
回复
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/8.5
X-TFS-ProcessId: d9a45aba-cc82-4f2c-98a3-e4441bfa456f
ActivityId: e780f2d6-1216-46ac-8c66-cb89379c7811
X-TFS-Session: e780f2d6-1216-46ac-8c66-cb89379c7811
X-VSS-E2EID: e780f2d6-1216-46ac-8c66-cb89379c7811
X-FRAME-OPTIONS: SAMEORIGIN
WWW-Authenticate: Bearer
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="tfs"
X-Powered-By: ASP.NET
P3P: CP="CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT"
Lfs-Authenticate: NTLM
X-Content-Type-Options: nosniff
Date: Tue, 16 Oct 2018 19:57:17 GMT
Content-Length: 1293
回复页面消息
401 - Unauthorized: Access is denied due to invalid credentials.
You do not have permission to view this directory or page using the credentials that you supplied.
但是,据我所知,有一个.NET Core应用程序仍可以正常还原软件包(除非仅从缓存中检索软件包)。
该服务帐户的凭据完全没有更改。根据这些文档,我已经确保服务帐户可以访问Feed:https://docs.microsoft.com/en-us/azure/devops/artifacts/feeds/feed-permissions?view=vsts&tabs=previous-nav
我还尝试在TFS服务器上的TFS站点的IIS中禁用基本身份验证,并启用Windows身份验证。两者都不起作用。
因此,我对尝试过/研究过的所有问题可能感到困惑。
答案 0 :(得分:0)
TL; DR;努吉太老了。更新它很有帮助。
在Windows 2019上为TFS 2018设置新的构建代理机器之后,我们遇到了同样的问题。但是,我们没有使用Wireshark来检查流量,因此这可能无关。尽管有相同的症状:一种解决方案有效(使用paket),其他无效(使用nuget)。
问题是 other 解决方案使用了已提交第三方目录中的nuget(版本2.x)。 Nuget设计为使用%localappdata%\ nuget中的“全局” nuget(如果可用)。而且该全球nuget版本不存在。作为构建代理用户更新nuget可以解决此问题,并将最新的nuget版本放入%localappdata%中:
nuget.exe update -self
我认为TFS 2018需要NTLM身份验证而不是基本身份验证(TFS 2017似乎仍支持该身份验证)。仍然奇怪的是,已安装的VS 2017.9.5没有更新nuget。
答案 1 :(得分:0)
即使升级到Azure DevOps Server 2019.0.1之后,尝试对同一集合中托管的程序包源进行身份验证时,我仍然收到401 Unauthorized。
解决方法
我曾经使用的解决方法是将程序包二进制文件放在构建服务器的程序包缓存文件夹中,该文件夹位于: C:\ Users \ .nuget \ packages
工作解决方案
但是,已经在Microsoft VS社区的帮助下找到了解决方案。更新的信用提供程序需要与NuGet Restore任务一起使用。
需要使用Nuget 4.8+才能起作用,然后需要在构建定义中添加2个构建变量: NuGet_ForceEnableCredentialProviderV2 = true NuGet.ForceEnableCredentialProvider = false
根据Microsoft代表,默认情况下将在ADOS 2019.1更新中启用此功能。
您可以在此处查看完整的线程: https://developercommunity.visualstudio.com/content/problem/360323/tfs-build-agent-cant-connect-to-package-feed.html