我最近从SonarQube 5.1.2升级到SonarQube 5.6.现在我收到IllegalStateException"执行文件责备时出错".这种情况在Eclipse和Jenkins中使用我的ant脚本构建.在Jenkins中,错误更加完整,表明SVNAuthenticationException E170001:协商身份验证失败:'没有提供有效凭据'.
SonarQube管理 - >常规设置 - > SCM - > SVN中存在有效凭据.它们与我在5.1.2中使用的凭据相同,并且责备功能无错误地工作,并为各种开发人员分配了问题.此外,我的构建脚本使用相同的凭据填充sonar.svn.username和sonar.svn.password.secured.
在5.1.2中我使用了sonar-issue-assign-plugin.我看到现在已经弃用了,实际上如果该插件存在,SonarQube 5.6将无法成功启动.不幸的是,取而代之的是不适合我.
我在这里和这里看到了同样错误的问题答案.
编辑:我仍然坚持这一个.我在SonarQube管理>生成设置> SCM> SVN中重新输入凭据,然后重新启动服务器.结果相同.这是异常堆栈跟踪的最后一部分:
引起:org.tmatesoft.svn.core.SVNAuthenticationException:svn:E170001:协商身份验证失败:org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:62)中没有提供"有效凭据" at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)at org.tmatesoft.svn.core.internal.io.dav.http.DefaultHTTPNegotiateAuthentication $ 1.run(DefaultHTTPNegotiateAuthentication.java:175 )org.tmatesoft.svn.core.internal.io.dav.http.DefaultHTTPNegotiateAuthentication $ 1.run(DefaultHTTPNegotiateAuthentication.java:166)at org.tmatesoft.svn.core.internal.io.dav.http.DefaultHTTPNegotiateAuthentication.authenticate( DefaultHTTPNegotiateAuthentication.java:221)org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:477)org.tmatesoft.svn.core.internal.io.dav.http.位于org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request的HTTPConnection.request(HTTPConnection.java:398)(HTTPConnection.java:386 )org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:863)at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:699) )org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:118)org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1049) )org.tmatesoft.svn.core.internal.io.dav.DAVRepository.hasCapability(DAVRepository.java:877)at org.tmatesoft.svn.core.io.SVNRepository.assertServerIsMergeInfoCapable(SVNRepository.java:787)at org. tmatesoft.svn.core.io.SVNRepository.getFileRevisions(SVNRepository.java:756)位于org.tmatesoft.svn的org.tmatesoft.svn.core.internal.wc2.remote.SvnRemoteAnnotate.run(SvnRemoteAnnotate.java:111). core.internal.wc2.remote.SvnRemoteAnnotate.run(SvnRemoteAnnotate.java:35)org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:21)at org.tmatesoft.svn.core. wc2.SvnOperationFactory.run(SvnOpe rationFactory.java:1235)org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:294)org.tmatesoft.svn.core.wc.SVNLogClient.doAnnotate(SVNLogClient.java:295)at org .sonar.plugins.scm.svn.SvnBlameCommand.blame(SvnBlameCommand.java:100)... 64更多
编辑2:我使用sonarqube-ant-task-2.5.jar将其作为Ant任务运行,我使用SonarQube插件(版本2.4.4)在Jenkins中将其作为单独的构建步骤运行,结果相同.我仍然不知道为什么在尝试分配责任时它没有找到我的SVN凭证.
我将回答我自己的问题,因为我找到了一个有效的解决方案.SVNKit似乎是一个问题,我的SVN服务器使用的是NTLM或Negotiate身份验证,而SonarQube插件调用的tmatesoft svn代码在我的环境中不支持.
将以下内容添加到JVM选项可解决此问题:
-Dsvnkit.http.methods=Basic,Digest,Negotiate,NTLM
解决方法在此处
这适用于通过在调用ant脚本时将其添加到JVM选项来从Ant调用Sonar,并且在添加到JVM选项时它也适用于Jenkins构建任务Execute SonarQube Scanner.