Sonar Gerrit 插件不报告结果

Sonar Gerrit plugin not reporting results

我们利用管道,构建成功完成后,我们运行如下:

bat "mvn sonar:sonar -B -s ${buildSettings} -Dsonar.analysis.mode=preview -Dsonar.skipDesign=true -Dsonar.report.export.path=sonar-report.json"

sonarToGerrit(severity: 'Major', postScore: true, category: 'Code-Review', newIssuesOnly: true, issuesScore: '0', noIssuesScore: '0', changedLinesOnly: true)

下面的构建日志显示它发现了很多问题,但要评论的问题是 0。

Build log

其他帖子表明它可能找不到该报告,但我认为情况并非如此,因为它发现了很多问题。任何管道配置建议将不胜感激。

我们使用的是 Sonar Gerrit 插件版本 2.2.1,Gerrit 触发器 2.27.3,Jenkins Enterprise 版本是 2.60.3.1。

与您的问题有关的最常见情况与 SonarQube 检查整个项目这一事实有关,而不管所做的更改量(尤其是更改)。创建新报告时,它将结果与存储在其数据库中的结果进行比较(以前发现的问题是在预览以外的模式下发现的)。因此 sonar 将它之前不知道的所有问题标记为新问题(如果您根本不将此信息存储在 SonarQube 中 - 所有问题都将标记为新问题)。但是 sonar-gerrit 插件只能 post 向受其正在验证的更改影响的文件发出问题。因此,即使您将设置 "newIssuesOnly" 和 "changedLinesOnly" 设置为 "false",所有不受更改影响的文件中的问题都将被忽略。

稍后,检查您的声纳报告中标有 "isNew"="true" 的问题是否确实已更改(对于 changedLinesOnly=true)或位于更改的文件中(对于changedLinesOnly = false) 在您尝试检查的提交中。

另一个可能的原因是项目配置设置。如果您的文件是子模块的一部分,您需要将子模块名称包含到项目基目录集。或者您可能想尝试 "allow auto match" 功能。该功能尝试自动将 SonarQube 模块与 Gerrit 名称匹配(自 2.1 起可用)。


与您的问题无关的关于您的管道代码的建议:

目前严重性(和其他枚举值)的设置识别是区分大小写的。事实上,该插件会忽略您的 "Major" 设置,因为它无法识别它,并将其替换为默认的 "INFO" 值。

另一件事,我不明白为什么要像设置 "issuesScore" = 0 和 "noIssuesScore"=0 一样将 "postScore" 设置为 true。为了简单起见,您可以只设置 postScore=false 并跳过这些设置以及 "category"。

此外,如果您使用2.0以上的插件版本,请注意API略有变化,现在使用下一个结构:

sonarToGerrit (
        reviewConfig: [ 
            issueFilterConfig: [
                severity: 'MAJOR', 
                newIssuesOnly: false, 
                changedLinesOnly: false
                ], 
            noIssuesTitleTemplate: 'Your text here',
            someIssuesTitleTemplate: 'Your text here',
            issueCommentTemplate: 'Your text here'
        ]
    )

尽管您的代码也应该可以工作(插件确实支持以前的版本),但存在错误的可能性更大。

我也面临与 Sonar-Gerrit jenkins 插件相同的问题。从 Jenkins 插件 site.Using Sonar-Gerrit 插件 2.2.1 下载它,并针对 jenkins 工作区分析声纳扫描。

作为示例,只更改了一个文件并将项目基目录提供给该文件的路径,运行 问题模式下的声纳分析。

Gerrit 中未使用日志加载问题

报告已加载并包含 759 个问题 待评论问题:0 计分涉及的问题:0 评论已发送