Jenkins Gerrit 报告值插件删除了 Code-review 的值

Posted

技术标签:

【中文标题】Jenkins Gerrit 报告值插件删除了 Code-review 的值【英文标题】:Jenkins Gerrit reporting values plugin removes Code-review's value 【发布时间】:2020-02-15 02:31:27 【问题描述】:

我有一个包含两个步骤的管道脚本。

SonarQube分析 UnitTests

如果 SonarQube 发现警告,它会将它们作为 cmets 报告回 Gerrit 并设置 Code-review-1。下一阶段是 UnitTest,如果可以,Pipeline 将成功,Jenkins 应该向 Gerrit Verified+1 报告。但是,当 Jenkins 报告 Verified+1 时,它会删除 Code-review-1

我的 Pipeline 脚本的相关部分:

....
    steps 
        withSonarQubeEnv('Managed SonarQube') 
            sh '''./sonar_runner.sh preview'''
            sonarToGerrit(
                inspectionConfig: [
                    serverURL: env.'SONAR_HOST_URL',
                    baseConfig: [
                        sonarReportPath: '.scannerwork/sonar-report.json',
                        autoMatch: true
                    ]
                ],
                scoreConfig: [
                    issueFilterConfig: [
                        severity: 'MINOR',
                        newIssuesOnly: false,
                        changedLinesOnly: false
                    ],
                    category: 'Code-Review',
                    noIssuesScore: 0,
                    issuesScore: -1
                ]
            )
        
        stage('UnitTest') 
            steps 
                ansiColor('xterm') 
                    sh '''./unittest.sh'''
                
      ....

我的“Gerrit 报告值”部分:

我的 Gerrit 历史:

我的最终结果:

我的问题:

如何在一次运行中设置Code-review-1Verified+1?如何避免 Gerrit 在报告 Verified+1 时删除 Code-review-1?我对 GUI 解决方案和 Pipeline 持开放态度。

编辑:

不能更改 Gerrit 插件的全局配置。我必须在 Jenkins 工作级别上解决它。有可能吗?

【问题讨论】:

嗨@milanbalazs,你介意分享你的Jenkinsfile关于如何将sonarqube发现作为cmets报告回gerrit吗?谢谢。 嗨@FrankLiu,没问题,我已经用完整的声纳模块扩展了我的问题。如果您有更多问题,请随时提问。 :) 非常感谢您的及时回复。我确实有后续行动。您是否使用sonar-gerrit 插件来实现此功能?从插件的网站上看,它似乎不再与 SonarQube 7.7 或更高版本兼容。我们计划使用 SonarQube 8.9 LTS 和 gerrit 3.3.1。您是否知道任何工具可以帮助我们使用稍新的 SonarQube 和 Gerrit 实现相同的结果?干杯。 是的,我正在使用sonar-gerrit 插件向 Gerrit 报告缺陷。我的 Gerrit 版本是 2.14.22,SonarQube 版本是 7.9.4,它适用于 Gerrit。只有preview 功能不再可用。我已经在sonar_runner.sh 脚本中实现了该功能。如果您对此实现感兴趣,请告诉我。 我明白了。只有preview 功能。我什至不确定 SonarQube 的 preview 功能是什么。让我做一些研究。我将尝试使用 sonar-gerrit plugin version 2.4.3 将 sonarqube 8.9 与 gerrit 3.3.1 集成,再次感谢您的意见。 【参考方案1】:

我认为您必须在“代码审查”字段中留下一个空字符串。 “0”值表示您要删除之前的投票。但是您还需要在

处检查全局 gerrit-trigger 配置
Jenkins > Manage Jenkins > Gerrit Trigger > Edit > Gerrit Reporting Values.

【讨论】:

感谢您的回答。你完全正确,我赞成你回答!但是,这是我的错,我没有在我的问题中提到我必须在 Jenkins 工作级别解决问题,所以我无法更改 Gerrit 全局配置(我们可以说我只有该工作的权限,而不是用于全局配置)。不幸的是,这意味着您的解决方案在我的情况下是不可能的。我已经用这个(非常重要的)细节更新了我的问题。 我明白了。如果您要求 Jenkins 管理员在 gerrit-trigger 配置中创建另一个“Gerrit 服务器”怎么办?该服务器可以命名为“Gerrit-No-Votes”,并且在所有“验证”和“代码审查”字段中都有空字符串。人们可以选择在作业配置中使用哪个服务器。【参考方案2】:

首先,正如我在问题中提到的那样,全局 Gerrit 配置更改和新的 Gerrit 服务器不是我的选择。我需要在 Jenkins 工作级别上解决这个问题。

我找到了一个“解决方案”,它是一种变通方法,但它确实有效。

第 0 步:

如果您在Jenkins 控制台日志中检查SonarQube 中的STDOUT,您可以看到一个特定的行,它指示了影响分数计算的问题的数量。这一行是:Issues to be involved in score calculation: X。这意味着您可以根据此行知道是否存在受影响的问题。

第 1 步:

您应该检查Jenkins 控制台日志并找出分数计算中涉及的问题数量。你可以在下面看到我的实现。如果存在问题(RegEx 值不为零),则此阶段应将构建结果设置为 UNSTABLE

stage('Results') 
            steps 
                script
                        for(String line : currentBuild.getRawBuild().getLog(30))
                            def find_pattern = (line =~ /^Issues to be involved in score calculation: [1-9]/)
                            if(find_pattern)
                                echo line
                                echo "Sonar has found warnings in changed lines. Build goes to UNSTABLE."
                                currentBuild.result = "UNSTABLE"
                            
                        
                    

其工作原理的示例输出:

Report has loaded and contains 1021 issues
Issues to be commented: 1
Issues to be involved in score calculation: 1
Review has been sent
[Pipeline] 
[Pipeline] // withSonarQubeEnv
[Pipeline] 
[Pipeline] // ansiColor
[Pipeline] 
[Pipeline] // stage
[Pipeline] stage
[Pipeline]  (Results)
[Pipeline] script
[Pipeline] 
[Pipeline] echo
Issues to be involved in score calculation: 1
[Pipeline] echo
Sonar has found warnings in changed lines. Build goes to UNSTABLE.

第 2 步:

配置Gerrit Reporting Values 块以在UNSTABLE 构建结果的情况下将两个值(CR 和已验证标签)报告回Gerrit

【讨论】:

以上是关于Jenkins Gerrit 报告值插件删除了 Code-review 的值的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 管道无法使用凭据推送到 gerrit

Sonar Gerrit插件不报告结果

Jenkins怎么集成c++单元测试?

如何在 Jenkins 中克隆工作?

配置gitlab gerrit jenkins

Jenkins+Ant+JMeter报告自动化