我正在Jenkins中设置sonarqube扫描作业,我确保在'管理>配置> SCM>用户名+密码中提供我的svn凭证在sonarqube。
使用svn blame数据可以很好地扫描大多数作业,但是在scm数据扫描阶段,我仍然会收到以下认证错误:
19:42:06.883 INFO: SCM provider for this project is: svn
19:42:06.883 INFO: 10938 files to be analyzed
19:42:16.899 INFO: 3/10938 files analyzed
19:42:26.901 INFO: 4/10938 files analyzed
.......
19:46:27.024 INFO: 246/10938 files analyzed
19:46:37.028 INFO: 247/10938 files analyzed
19:46:47.036 INFO: 247/10938 files analyzed
19:46:57.044 INFO: 247/10938 files analyzed
19:47:07.044 INFO: 247/10938 files analyzed
19:47:17.044 INFO: 247/10938 files analyzed
19:47:27.044 INFO: 247/10938 files analyzed
19:47:37.044 INFO: 247/10938 files analyzed
19:47:40.763 INFO: 248/10938 files analyzed
19:47:40.888 INFO: ------------------------------------------------------------------------
19:47:40.888 INFO: EXECUTION FAILURE
19:47:40.888 INFO: ------------------------------------------------------------------------
19:47:40.888 INFO: Total time: 2:02:46.450s
19:47:41.075 INFO: Final Memory: 36M/3064M
19:47:41.075 INFO: ------------------------------------------------------------------------
19:47:41.075 ERROR: Error during SonarQube Scanner execution
19:47:41.075 ERROR: Error when executing blame for file foo/bar.java
19:47:41.075 ERROR: Caused by: svn: E170001: Authentication required for '<http://svn-app:1234> john'
19:47:41.075 ERROR:
19:47:41.075 ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succedeed?
ERROR: SonarQube scanner exited with non-zero code: 1
Finished: FAILURE
奇怪的是,我多次运行此扫描,并且此错误总是围绕它正在分析的240-250个文件,即并不总是相同的文件。奇怪的是,身份验证最初进行了,只是在240-250左右的文件中,然后出现此错误。
各种解决方案建议禁用我的要求禁止的scm传感器(sonar.scm.disabled = true)。我需要scm blame数据。
我试过以下的事情:
事实证明这是由于SVN的KeepAliveTimeout
参数设置得太低。当它分析特定的大文件时,它会达到此超时(例如,根据我的代码示例,在第207个文件上超过1分钟),导致SVN重新挑战sonarqube以获取凭据。
现在,其他svn客户端将在%HOMEPATH%/AppData/Roaming/Subversion/auth/svn.simple/
下创建凭据缓存,并在遇到此情况时检索此缓存。然而,Sonarqube的svn插件(svnkit)不存储凭证缓存,即使存在缓存,它也不知道如何读取它(使用加密和纯文本缓存尝试它)。
在httpd.conf中编辑svn的KeepAliveTimeout
参数解决了这个问题,理论上是对svn服务器性能的权衡 - 因为svn会在确认客户端空闲以关闭连接回收资源之前等待更长时间,因此增加KeepAliveTimeout
参数会导致svn在任何给定时间持有更多请求。
参考文献:
类似的问题:https://groups.google.com/forum/#!topic/sonarqube/-Vz2zoOBS1Y
SVNkit身份验证机制:https://wiki.svnkit.com/Authentication:https://github.com/jenkinsci/svnkit
Sonarqube SVNkit插件回购:https://github.com/SonarSource/sonar-scm-svn
Jenkins SVNkit插件回购:https://github.com/jenkinsci/svnkit