我们在TFS 2017服务器上使用了Sonarqube大约2个月。总体而言,它非常有用,但几周前,由于Sonarqube返回401错误(未经授权),我们的一个版本开始失败。
2017-10-12T15:11:19.7921253Z ## [错误] 16:11:19.729无法请求和解析“http://sonarqube.local:9000/api/settings/values?component=MYPROJECTNAME%3Amaster”:远程服务器返回错误:(401)未经授权。
2017-10-12T15:11:19.7921253Z ## [错误] 16:11:19.729无法在连接SonarQube服务器时进行授权。检查您的凭据,然后重试。
这个奇怪的是,其他项目的其他构建工作正常,使用相同的API令牌。我甚至在失败的项目中创建了一个新的Sonarqube端点,然后再次在一个已知的好项目中 - 再次在两者上使用相同的API密钥 - 只是为了发生同样的事情。一个失败,上面的错误,另一个很好。
我认为这可能是sonarqube本身的安全/许可选项,所以我尝试创建一个全新的sonarqube项目但又一次 - 一个TFS项目失败,而另一个TFS项目指向这个新项目时成功。
我怀疑这个问题源于TFS项目的安全设置,但是在将一个好的项目与糟糕的项目进行比较之后,没有任何事情可以告诉我原因可能是什么 - 它们似乎设置相同。我在良好的构建和坏构建上启用了调试并比较了输出。据我所知,两者之间唯一真正的区别是“失败”构建从某个地方获取了一个sonar.password,而良好的构建则没有:
好:
2017-10-12T15:13:07.1067146Z ## [debug]已处理:## vso [task.setvariable variable = MSBuild.SonarQube.ServerPassword;]
2017-10-12T15:13:07.2785974Z ## [debug] arguments = / c“”Y:\ 2017_agent_work_tasks \ SonarQubeScannerMsBuildBegin_15b84ca1-b62f-4a2a-a403-89b77a063157 \ 3.0.2 \ SonarQubeScannerMsBuild \ MSBuild.SonarQube.Runner .exe“begin / k:”MYPROJECTNAME“/ n:”MYPROJECTNAME“/v:"20171012.7”/d:sonar.host.url="http://sonarqube.local:9000/"/d:sonar.login= ******** /d:sonar.cs.vscoveragexml.reportsPaths="***.coveragexml“/d:sonar.branch="master”“
为:
2017-10-12T15:11:19.5733714Z ## [debug]已处理:## vso [task.setvariable variable = MSBuild.SonarQube.ServerPassword;] ********
2017-10-12T15:11:19.5733714Z ## [debug]路径:Z:\ 2017_agent_work_tasks \ SonarQubeScannerMsBuildBegin_15b84ca1-b62f-4a2a-a403-89b77a063157 \ 3.0.2 \ SonarQubeScannerMsBuild \ MSBuild.SonarQube.Runner.exe 2017-10-12T15:11:19.5733714Z ## [debug]参数:begin / k:“MYPROJECTNAME”/ n:“MYPROJECTNAME”/v:"20171012.3“/d:sonar.host.url="http:// sonarqube.local:9000 /“/ d:sonar.login =******** /d:sonar.password=******** /d:sonar.cs.vscoveragexml.reportsPaths="* **。coveragexml“/d:sonar.branch="master”
(注意:虽然在这种情况下,不同的构建代理程序运行良好/不良,但代理程序是相同的,我已经确认“好”项目对我们所有的代理程序都有效,而“坏”项目失败则相同结果所有代理商。)
但是,我不知道从哪里获取此密码 - 存储库中没有sonar.properties文件。为了绝对肯定,我克隆了失败的TFS项目的存储库,将其推入到正在运行的TFS项目的存储库中,复制了构建并且它正常工作。
我已经检查了Sonarqube本身的日志,但这些日志并没有帮助
我可以错过什么?
2017年TFS为15.117.26714.0
Sonarqube是6.5.0.27846
Sonarqube任务版本是3.0.2
编辑:我已经设法通过编辑构建任务来获取临时解决方法,以便不将sonar.password插入命令行,这样可行。这确实证明了根本问题是将这个神秘密码从“某个地方”拉出来的任务,但我仍然不知道它将在哪里捡起它。我找不到有关MSBuild.SonarQube.ServerPassword
集的更多信息
答案 0 :(得分:3)
基于(401)未经授权。一般而言,您需要在TFS中的SonarQube服务端点中指定身份验证令牌:click!要在SonarQube中获取用户令牌,请关注these steps但是,根据您已经完成的故障排除和一个项目的工作,另一个不起作用,这与你的问题无关。
请确保SonarQube.Analysis.xml中的sonar.login
和sonar.password
属性已被注释掉,否则将无法使用该令牌。
还建议您比较良好构建和错误构建的构建定义。另一种方法是仅为坏项目的声纳qube相关任务创建新的构建定义。要查看身份验证是否有效,如果问题与构建定义相关,则会缩小范围。