我在VSTS中设置了一个构建过程,该过程从面向公众的SVN URL中提取源代码。当我从仪表板手动排队构建或者我计划在特定时间运行构建时,它工作得很好。但是,当构建通过持续集成排队时,它会抛出以下异常:
An exception occurred while polling the repository. Error: Microsoft.TeamFoundation.Build2.Server.Extensions.BuildPollingException: Unable to connect to a repository at URL '<Path to the URL I am referencing>' --->
SharpSvn.SvnRepositoryIOForbiddenException: Unable to connect to a repository at URL '<Path to the URL I am referencing>' --->
SharpSvn.SvnRepositoryIOForbiddenException: Access to '<Path to the trunk of the repository>' forbidden
当我查看Subversion所依赖的服务器上的事件日志时,它显示构建代理正在尝试使用匿名登录访问URL,因此我看到了异常。
有没有人遇到过这个?我知道我已经使用用户凭据正确配置了服务端点,因为它在我手动触发或调度构建队列时起作用。我已就此主题进行了大量搜索,但未发现涉及VSTS和SVN问题的大量信息。任何指导或问题将不胜感激。
答案 0 :(得分:3)
CI的轮询作业由TFS服务器上的作业代理执行。显然,您的作业代理配置为以NT AUTHORITY \ NETWORK SERVICE(即DOMAIN \ TFSSERVER $)运行。另一方面,看起来您将VisualSVN Enterprise实例配置为使用NTLM。在这种情况下,轮询作业用于访问存储库的SharpSvn库不使用基本凭据。不幸的是,那是SharpSvn的限制。您应该在VisualSVN服务器配置中为计算机帐户(DOMAIN \ TFSSERVER $)提供对SVN存储库的READ访问权限(以继续使用NTLM),或者在VisualSVN服务器上禁用NTLM以切换到基本身份验证。
[很少有技术细节]您在SVN日志中看到的匿名请求是SharpSvn库中实现的普通HTTP请求流的一部分:
[注1 ]轮询作业不会从SVN存储库下载任何源,它只会请求自上次成功执行以来更改的文件列表,并决定是否需要安排构建。
[注意2 ]如果轮询作业由于同样的原因持续失败,它会将每次第100次失败报告为TFS,因为失败的构建提供了失败的原因。
亚历
答案 1 :(得分:0)
我期待有类似的问题。使用TFS 2015 Update 3和VisualSVN Server 3.4.6。 CI轮询我得到了同样的错误。在SVN服务器上,每次TFS轮询时我都会收到以下错误:访问被拒绝:'TFSSERVER $'选项:[客户端]
此处TFSSERVER $是我们TFS服务器的计算机名称。
所以我在存储库的根目录下提供了DOMAIN \ TFSSERVER $ Read Only权限,然后工作正常。当然,我不得不这样做。
提交了有关它的错误:SVN CI Polling Uses TFS Machine Account Not SVN Account Set in the Service EndPoint
答案 2 :(得分:-2)