我最近从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 Administration>中重新输入了凭据。生成设置> SCM> SVN并重启服务器。结果相同。这是异常堆栈跟踪的最后一部分:
引起:org.tmatesoft.svn.core.SVNAuthenticationException:svn:E170001:协商身份验证失败:'未提供有效凭据' 在org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:62) 在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) at 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) at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:398) 在org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:386) 在org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:863) 在org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:699) 在org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:118) at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1049) at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.hasCapability(DAVRepository.java:877) at org.tmatesoft.svn.core.io.SVNRepository.assertServerIsMergeInfoCapable(SVNRepository.java:787) 在org.tmatesoft.svn.core.io.SVNRepository.getFileRevisions(SVNRepository.java:756) 在org.tmatesoft.svn.core.internal.wc2.remote.SvnRemoteAnnotate.run(SvnRemoteAnnotate.java:111) 在org.tmatesoft.svn.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(SvnOperationFactory.java:1235) 在org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:294) at org.tmatesoft.svn.core.wc.SVNLogClient.doAnnotate(SVNLogClient.java:295) 在org.sonar.plugins.scm.svn.SvnBlameCommand.blame(SvnBlameCommand.java:100) ......还有64个
编辑2 :我使用sonarqube-ant-task-2.5.jar将其作为Ant任务运行,并且我已将其作为Jenkins中的单独构建步骤运行使用SonarQube插件(版本2.4.4)具有相同的结果。在尝试分配责任时,我仍然不知道为什么它没有找到我的SVN凭证。
答案 0 :(得分:7)
我将回答我自己的问题,因为我找到了一个有效的解决方案。 SVNKit似乎是一个问题,我的SVN服务器使用的是NTLM或Negotiate身份验证,而SonarQube插件调用的tmatesoft svn代码在我的环境中不支持。
将以下内容添加到Jenkins主机JVM选项可解决此问题:
-Dsvnkit.http.methods=Basic,Digest,Negotiate,NTLM
这适用于通过在调用ant脚本时将其添加到JVM选项来从Ant调用Sonar,并且在添加到JVM选项时它也适用于Jenkins构建任务Execute SonarQube Scanner。