0

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

  • SonarQube分析
  • UnitTests

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

我的管道脚本的相关部分:

....
    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-1和?Verified+1如何避免 Gerrit 删除Code-review-1when 报告Verified+1?我对 GUI 解决方案和 Pipeline 持开放态度。

编辑:

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

4

2 回答 2

2

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

Jenkins > Manage Jenkins > Gerrit Trigger > Edit > Gerrit Reporting Values.
于 2019-10-18T11:36:36.987 回答
0

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

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

步骤 0:

如果您检查控制台日志STDOUTSonarQubeJenkins,您可以看到一个特定的行,该行指示影响分数计算的问题的数量。这一行是: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报告回两个值(CR 和已验证标签) 。GerritUNSTABLE

在此处输入图像描述

于 2019-11-07T08:31:28.873 回答