Sonarqube TFS 任务返回错误 (401) 在一个项目上未经授权,但在其他项目上未经授权

Kus*_*han 1 tfs sonarqube sonarqube-scan

过去 2 个月,我们一直在 TFS 2017 服务器上使用 Sonarqube。总的来说,它非常有帮助,但几周前,由于 Sonarqube 返回 401 错误(未经授权),我们的一个构建开始失败。

2017-10-12T15:11:19.7921253Z ##[error]16:11:19.729 无法请求和解析“ http://sonarqube.local:9000/api/settings/values?component=MYPROJECTNAME%3Amaster ”:远程服务器返回错误:(401) 未经授权。

2017-10-12T15:11:19.7921253Z ##[error]16:11:19.729 连接到 SonarQube 服务器时无法授权。检查您的凭据,然后重试。

奇怪的是,来自其他项目的其他构建使用相同的 API 令牌运行得非常好。我什至在失败的项目中创建了一个新的 Sonarqube 端点,然后在一个已知的好项目中再次创建了一个新的 Sonarqube 端点 - 再次在两者上使用相同的 API 密钥 - 只是为了发生同样的事情。一个失败并出现上述错误,另一个没问题。

我认为这可能是 sonarqube 本身中的一个安全/权限选项,所以我尝试创建一个全新的 sonarqube 项目,但再次 - 一个 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] 参数 = /c ""Y:\2017_agent_work_tasks\SonarQubeScannerMsBuildBegin_15b84ca1-b62f-4a2a-a403-863b703003-863b777203-863b777203-863b777203-863.开始 /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]Processed: ##vso[task.setvariable variable=MSBuild.SonarQube.ServerPassword;]********


2017-10-12T15:11:19.5733714Z ##[debug] 路径:Z:\2017_agent_work_tasks\SonarQubeScannerMsBuildBegin_15b84ca1-b62f-4a2a-a403-89b77\Sonar10MSQube-Sonar10MSQube10301MSQube-Sonar10MSQube-2017_agent_work_tasks\SonarQubeScannerMsBuildBegin_15b84ca1 :11:19.5733714Z ##[debug] 参数:开始 /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 本身的日志,但它们的帮助不大

我可能错过了什么?

TFS 2017 是 15.117.26714.0

声纳是 6.5.0.27846

Sonarqube 任务版本为 3.0.2

编辑:我设法通过编辑构建任务而不将 sonar.password 插入命令行来获得临时解决方法,这有效。这确实证明根本问题是从“某处”提取这个神秘密码的任务,但我仍然不知道它会在哪里提取。我找不到有关设置的太多信息MSBuild.SonarQube.ServerPassword

Pat*_*SFT 5

基于 (401) 未经授权。一般来说,你需要在 TFS 中的 SonarQube 服务端点中指定身份验证令牌:点击!要在 SonarQube 中获取用户令牌,请按照下列步骤操作但是,根据您所做的故障排除,一个项目有效,另一个无效,这应该与您的问题无关。

请确保将SonarQube.Analysis.xml 中的sonar.loginsonar.password属性注释掉,否则将不会使用令牌。

还建议您比较好构建和坏构建的构建定义。另一种方法是仅使用与声纳 qube 相关的任务为坏项目创建新的构建定义。要查看身份验证是否有效,这将缩小与构建定义相关的问题。