【问题标题】:PR preview analysis causes waitForQualityGate to failPR预览分析导致waitForQualityGate失败
【发布时间】:2017-11-10 05:02:25
【问题描述】:

今天我在设置一个检查质量门的 Jenkins 流水线脚本时遇到了异常 并用任何新问题注释拉取请求。

我们的设置包含:

  • SonarQube 6.2
  • BitBucket 存储
  • Jenkins 2(带 2 个从站)
  • AmadeusITGroup 存储插件

部分流水线脚本:

node(node_label) {
    stage("SonarQube analysis") {
        withSonarQubeEnv('SonarQube') {
            def sonarQubeCommand = "org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar " +
                    "-Dsonar.host.url=https://sonar-url " +
                    "-Dsonar.login=sonarqube " +
                    "-Dsonar.password=token " +
                    "-Dsonar.language=java " +
                    "-Dsonar.sources=. " +
                    "-Dsonar.inclusions=**/src/main/java/**/*"
            if (pr.id != '') {
                sonarQubeCommand = sonarQubeCommand +
                        " -Dsonar.analysis.mode=preview" +
                        " -Dsonar.stash.notification=true " +
                        " -Dsonar.stash.project=" + pr.project_key +
                        " -Dsonar.stash.repository=" + pr.repository_slug +
                        " -Dsonar.stash.pullrequest.id=" + pr.id +
                        " -Dsonar.stash.password=token"
            }
            pipeline.mvn(sonarQubeCommand)
        }
    }
}

stage("Check Quality Gate") {
    timeout(time: 1, unit: 'HOURS') {
        def qg = waitForQualityGate()
        waitUntil {
            // Sometimes an analysis will get the status PENDING meaning it still needs to be analysed.
            if (qg.status == 'PENDING') {
                qg = waitForQualityGate()
                return false
            } else {
                return true
            }
        }
        node(node_label) {
            if (qg.status != 'OK') {
                bitbucket.comment(pr, "_${env.JOB_NAME}#${env.BUILD_NUMBER}:_ **[✖ BUILD FAILURE](${build_url})**")
                bitbucket.approve(pr, false)
                pipeline.cleanWorkspace()
                error "Pipeline aborted due to quality gate failure: ${qg.status}"
            } else {
                bitbucket.comment(pr, "_${env.JOB_NAME}#${env.BUILD_NUMBER}:_ **[✔ BUILD SUCCESS](${build_url})**")
                bitbucket.approve(pr, true)
            }
        }
    }
}

顺便说一句:没有 waitUntil 管道失败,因为任务状态在 SonarQube 中为 PENDING。 所以 SonarSource 博客中的示例不太适合我。

现在详细了解此管道如何失败:

当使用 sonar.analysis.mode=preview 作为 maven 命令的参数时 jenkins 作业日志将不包含 SonarQube 分析任务 ID。 这将导致命令 waitForQualityGate 上的管道脚本失败。 消息内容如下: 无法获取 SonarQube 任务 ID 和/或服务器名称。请使用“withSonarQubeEnv”包装器来运行您的分析。

一旦我删除了 sonar.analysis.mode=preview 参数,jenkins 日志就会读取如下一行:[INFO] More about the report processing at https://sonar-url/api/ce/task?id=AVyHXjcsesZZZhqzzCSf

这一行使 waitForQualityGate 命令正常成功。 然而,除了 SonarQube 中的项目对 PR 结果的污染之外,这还有一个不需要的副作用。 副作用是,当在拉取请求中添加问题时,不会在 stash 中的拉取请求中报告此问题。 它总是报告零新问题,这显然是错误的。 由于它不再是预览分析,我可以在 SonarQube 服务器上看到新问题。

所以不知何故,我现在必须在使用新问题注释的拉取请求或 检查质量门。 显然我想两者都做。 我选择让拉取请求注释正常工作,暂时跳过质量门检查。

问题仍然是我在这里做错了什么还是我必须等待新版本的扫描仪和/或存储插件才能解决这个问题?

【问题讨论】:

    标签: sonarqube sonarqube-scan


    【解决方案1】:

    在声纳的服务器上转到:

    管理 > 配置 > 常规设置 > Webhook

    姓名:詹金斯之类的

    网址http://127.0.0.1:8080/sonarqube-webhook/

    其中,URL 是 Jenkins 主机。

    原因

    默认情况下,声纳上的 webkook 是 https,而我的 jenkins 正在通过 http 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多