2017-10-13 240 views
0

我们在TFS 2017服务器上使用Sonarqube约两个月。总的来说,它非常有帮助,但是几周前,由于Sonarqube返回401错误(未授权),我们的一个构建开始失败。Sonarqube TFS任务返回错误(401)在一个项目上未授权但不是其他人

2017-10-12T15:11:19.7921253Z ##[error]16:11:19.729 Failed to request and parse ' http://sonarqube.local:9000/api/settings/values?component=MYPROJECTNAME%3Amaster ': The remote server returned an error: (401) Unauthorized.

2017-10-12T15:11:19.7921253Z ##[error]16:11:19.729 Could not authorize while connecting to the SonarQube server. Check your credentials and try again.

好奇的是,使用相同的API令牌,其他项目的其他构建工作得很好。我甚至在失败的项目中创建了一个新的Sonarqube端点,然后再次在一个已知的好项目中再次使用相同的API密钥 - 仅仅发生同样的事情。一个失败,出现上述错误,另一个没问题。

我认为这可能是sonarqube本身的一个安全/权限选项,所以我尝试创建一个全新的sonarqube项目,但又一次 - 一个TFS项目失败,而另一个成功时,都指向这个新项目。

我怀疑这个问题源于TFS项目的安全设置,但是在比较了一个好的项目和不好的项目之后,没有什么会跳到我的原因可能是 - 他们似乎设置相同。我启用了良好构建和糟糕构建的调试,并比较了输出。据我所知,两者之间的唯一真正的区别是,“失败”建设正在加速从某处sonar.password而好身材是不是:

好:

2017-10-12T15:13:07.1067146Z ##[debug]Processed: ##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]Processed: ##vso[task.setvariable variable=MSBuild.SonarQube.ServerPassword;]********


2017-10-12T15:11:19.5733714Z ##[debug] Path: 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] Arguments: 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本身的日志和它们小于有用

什么可能我错过了什么?

TFS 2017 15.117.26714.0

Sonarqube为6.5.0.27846

Sonarqube任务的版本是3.0.2

编辑:我已成功通过编辑构建以获取此临时解决方法任务不要插入sonar.password到命令行,这是可行的。这确实证明了根本问题是将这个神秘密码从“某处”拉出来的任务,但我仍然对它将在何处采集它的问题感到不知所措。我无法找到关于哪些设置的更多信息MSBuild.SonarQube.ServerPassword

回答

1

基于(401)未授权。一般来说,您需要在TFS中的SonarQube服务端点中指定身份验证令牌:click!要获取SonarQube中的用户令牌,请遵循these steps但是,根据您所做的故障排除和一个项目的工作情况,另一个不起作用,这应该与你的问题。

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

还建议您比较良好构建和错误构建的构建定义。另一种方法是只为声呐相关的任务创建一个新的构建定义,用于不良项目。要查看身份验证是否有效,如果问题与构建定义相关,则会缩小范围。

相关问题