TFS - 找不到SonarQube问题报告

时间:2017-01-18 15:58:13

标签: tfs sonarqube azure-devops

我正在使用TFS 2017和SonarQube 5.6.2 5.6.4 6.2。

我正在尝试将SonarQube集成到pull请求中。在看起来没有任何问题的拉动请求中,声纳分析运行正常。它看起来只有在发现问题时才会失败并且它会尝试读取sonar-report.json以将问题发布到拉取请求。我在似乎发现问题的构建上收到以下错误:

------------------------------------------------------------------------
EXECUTION SUCCESS
------------------------------------------------------------------------
Total time: 5:25.577s
Final Memory: 56M/600M
------------------------------------------------------------------------
The SonarQube Scanner has finished
Creating a summary markdown file...
Analysis results: http://somedomain:9000/dashboard/index/CP
Post-processing succeeded.
Fetching code analysis issues and posting them to the PR...
System.Management.Automation.RuntimeException: Could not find the SonarQube issue report at D:\agent2-TFS-Build01\_work\13\.sonarqube\out\.sonar\sonar-report.json. Unable to post issues to the PR. ---> System.IO.FileNotFoundException: Could not find the SonarQube issue report at D:\agent2-TFS-Build01\_work\13\.sonarqube\out\.sonar\sonar-report.json. Unable to post issues to the PR.
 --- End of inner exception stack trace ---
 at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
 at System.Management.Automation.PowerShell.Worker.ConstructPipelineAndDoWork(Runspace rs, Boolean performSyncInvoke)
 at System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork(Runspace rsToUse, Boolean isSync)
 at System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
 at System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
 at Microsoft.TeamFoundation.DistributedTask.Handlers.PowerShellHandler.Execute(ITaskContext context, CancellationToken cancellationToken, Int32 timeoutInMinutes)
 at Microsoft.TeamFoundation.DistributedTask.Worker.JobRunner.RunTask(ITaskContext context, TaskWrapper task, CancellationTokenSource tokenSource)

据我所知,无法配置此报告的位置。我读到的一件事是,如果您没有在构建质量门故障时失败,那么您也不应该在构建摘要中启用包含完整分析报告的选项。没有具体说明为什么会这样。我目前可以选择启用报告。这可能是我问题的原因吗?我们并没有在质量门失败的基础上失败,因为我试图给开发者一些时间来适应变化。谁知道这里发生了什么?以下是我的准备分析设置的屏幕截图。 enter image description here

您可以找到最终分析步骤here的日志副本。我收回了域名和用户名。日志中的其他所有内容都保持不变。

编辑1/19:

由于我没有在启用质量门故障时失败,因此如果构建确实未通过质量门,则不会收到错误消息。我收到了上面发布的有关sonar-report.json丢失的错误消息。以下是我看到的零问题拉请求。

Fetching code analysis issues and posting them to the PR...
SonarQube found 0 issues out of which 0 are new
True
Processing 0 new messages
No new messages were posted
Uploading the legacy summary report. The new report is not uploaded if not enabled, if the SonarQube server version is 5.2 or lower or if the build was triggered by a pull request
The build was not set to fail if the associated quality gate fails.

这就是为什么我认为它只发生在有一些问题要发布到PR的构建上。它正在寻找的sonar-report.json何时被写入?我查看了构建服务器上的工作区,文件肯定不存在。

修改1/30/17:

以下是一些可能有助于弄清楚它是什么的其他信息。目前,我有26个项目在PR和CI构建上运行SQ分析。所有CI构建都按预期工作。 24/26 PR版本按预期工作。只有两个失败的构建都是webapp项目。其中一个由C#,TypeScript和JavaScript组成。另一个是C#,VB,TypeScript和Javascript。所有成功的项目都是严格的C#应用​​程序。我注意到的是,在所有C#应用程序中,我看到类似于此的日志消息:

INFO: Performing issue tracking
INFO: 1033/1033 components tracked
INFO: Export issues to D:\agent2-TFS-Build01\_work\35\.sonarqube\out\.sonar\sonar-report.json
INFO: ANALYSIS SUCCESSFUL

失败的构建中缺少这个小Export位。以下是其中一个失败的PR版本的日志片段。我希望日志的顺序有点类似,但缺少Export issues to ...部分。即使这是一个公关版本,它看起来也在上传完整的分析报告:

INFO: Analysis report generated in 2672ms, dir size=10 MB
INFO: Analysis reports compressed in 2750ms, zip size=4 MB
INFO: Analysis report uploaded in 583ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://~:9000/dashboard/index/AppName

在分析由TypeScript编译器生成的JS文件时,我遇到了大量Missing blame information for the following files: [long list of files]错误。我不知道这些错误是否与为什么失败有关,但这是我在日志中看到的构建步骤中唯一的错误。

所以,现在我想要解决的问题是为什么两个Web应用程序项目的问题没有导出到sonar-report.json。正如您在以下日志消息中看到的那样,两个项目都是作为PR构建启动的,分析模式设置为issues并且导出路径设置为sonar-report.json但是在扫描完成时它会跳过出口步骤。

##[debug]Calling InvokeGetRestMethod "/api/server/version" 
##[debug]Variable read: MSBuild.SonarQube.HostUrl = http://somedomain:9000/
##[debug]Variable read: MSBuild.SonarQube.ServerUsername = ********
##[debug]Variable read: MSBuild.SonarQube.ServerPassword = 
##[debug]GET http://somedomain:9000/api/server/version with 0-byte payload
##[debug]received 3-byte response of content type text/html;charset=utf-8
##[debug]/d:sonar.ts.lcov.reportPath="C:\TFS-Build02-Agent2\_work\11\s\Source\AppName.Web\CodeCoverage\lcov\lcov.info" /d:sonar.ts.tslintconfigpath="C:\TFS-Build02-Agent2\_work\11\s\Source\AppName.Web\tslint.json" /d:sonar.ts.tslintruledir="C:\TFS-Build02-Agent2\_work\11\s\Source\AppName.Web\tslint-rules\" /d:sonar.ts.tslintpath="C:\TFS-Build02-Agent2\_work\11\s\Source\AppName.Web\node_modules\tslint\bin\tslint" /d:sonar.analysis.mode=issues /d:sonar.report.export.path=sonar-report.json

第二个失败的是:

##[debug]Calling InvokeGetRestMethod "/api/server/version" 
##[debug]Variable read: MSBuild.SonarQube.HostUrl = http://somedomain:9000/
##[debug]Variable read: MSBuild.SonarQube.ServerUsername = ********
##[debug]Variable read: MSBuild.SonarQube.ServerPassword = 
##[debug]GET http://somedomain:9000/api/server/version with 0-byte payload
##[debug]received 3-byte response of content type text/html;charset=utf-8
##[debug]/d:sonar.ts.lcov.reportpath="D:\agent2-TFS-Build01\_work\13\s\Source\AppName.WebApp\CodeCoverage\lcov\lcov.info" /d:sonar.ts.tslintconfigpath="D:\agent2-TFS-Build01\_work\13\s\Source\AppName.WebApp\tslint.json" /d:sonar.ts.tslintruledir="D:\agent2-TFS-Build01\_work\13\s\Source\AppName.WebApp\tslint-rules\" /d:sonar.ts.tslintpath="D:\agent2-TFS-Build01\_work\13\s\Source\AppName.WebApp\node_modules\tslint" /d:sonar.analysis.mode=issues /d:sonar.report.export.path=sonar-report.json

1 个答案:

答案 0 :(得分:1)

我终于有时间回过头来解决这个问题。如果在最终分析步骤中遇到错误,SonarQube VSTS任务似乎不会导出问题报告。我浏览了构建日志,并确保排除typescript编译器生成的任何js文件。这有助于消除正在发生的许多missing blame information错误。一旦我将这些文件排除在分析之外,我将SonarTsPlugin更新为最新版本以及所有相关的构建变量,并且PR集成再次开始工作。

我知道这很有效,因为我不再看到RuntimeException: Could not find the SonarQube issue report错误。现在我在日志中看到了这一点:

SonarQube found 9264 issues out of which 102 are new
Processing 102 new messages
102 message(s) were filtered because they do not belong to files that were changed in this PR

如果您遇到这样的问题,我建议您考虑修复您在日志中看到的最终分析步骤中的任何构建错误。一旦我把它们全部解决了,它就按照预期开始工作了。