VSTS构建失败,出现SVN禁止异常

时间:2016-06-07 20:37:02

标签: azure-devops visualsvn-server azure-pipelines

我在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问题的大量信息。任何指导或问题将不胜感激。

3 个答案:

答案 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请求流的一部分:

  • 该库首先向服务器提交匿名请求。
  • 如果服务器拒绝请求,则库会检查WWW-Authenticate响应标头以检测身份验证方案 服务器请求。
  • WWW-Authenticate:与WWW-Authenticate:Basic相比,NTLM标头具有更高的优先级。这就是用户名和密码的原因 在连接端点中指定的内容根本不使用。
  • 如果响应中只存在WWW-Authenticate:Basic标头,则库使用客户端提供的回调函数 要求凭据信息。此时用户名和 连接端点中指定的密码将提供给 民意调查工作的图书馆。

[注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)

CI与SVN存储库的手动/预定构建之间没有任何重大差异。当您将其配置为持续集成时,它只是按您设置的轮询间隔检查SVN存储库,然后在有任何新更改时运行构建。它们之间的唯一区别是您需要为CI设置“过滤器”,并根据您获得的访问禁止错误消息,您没有读取路径的权限。因此,您需要检查您的帐户是否具有您在“过滤器”中设置的路径的读取权限。 enter image description here