在 Jenkinsfile 中设置 SonarQube webhook

Set a SonarQube webhook in Jenkinsfile

我正在尝试创建一个 Jenkins 多分支管道,在每次推送到 bitbucket 时,都会在项目的该分支上执行 SonarQube 分析。 Jenkins 正确地为每个分支创建新作业,并在 SonarQube 中创建一个新项目,并将分支名称附加到项目名称。

我遇到的问题是,当 SonarQube 创建新项目时,报告 Quality Gate 状态的 webhook 默认没有设置,所以我必须手动进入每个 SonarQube 项目并设置 Webhook url。当我的团队每天创建很多分支时,这是一个问题。

有没有办法在我的 Jenksfile 中指定我希望 SonarQube 项目有一个 webhook?

stage('SonarQube Analysis') {
        steps {
            withSonarQubeEnv('Sonarqube Server') {
                script {
                    def sonarScanner = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
                    sh "${sonarScanner}/bin/sonar-scanner " +
                    "-Dsonar.projectKey=ProjectName-${GIT_BRANCH} " +
                    "-Dsonar.projectName=ProjectName-${GIT_BRANCH} " +
                    "-Dsonar.projectVersion=0.0.0 " +
                    "-Dsonar.sources=**/src " +
                    "-Dsonar.java.binaries=**/build " +
                    "-Dsonar.exclusions=excluded_dirs/** " +
                    "-Dsonar.sourceEncoding=UTF-8"
                }
            }
            timeout(time: 5, unit: 'MINUTES') {
                script {
                    def qg = waitForQualityGate()
                    if (qg.status != 'OK') {
                        error "Pipeline aborted due to a quality gate failure: ${qg.status}"
                    }
                }
            }
        }
    }

目前,我的 Jenkins 构建在 5 分钟后超时。设置 webhook 后,需要几秒钟才能收到回复。我的 webhook url 是正确的,我只是想让 Jenkinsfile 设置它,而不是我手动设置它。

编辑: 不幸的是,我不是 SonarQube 的管理员,只是我的项目

作为 sonarqube 的管理员,转到 https://my-sonarqube.tld/admin/webhooks 将 url 配置为 https://my-jenkins-domain.tld/sonarqube-webhook/

这应该适用于所有项目。如果您仍然没有收到货物,请检查最近的交货(同一页面中的选项)并查看错误。

您的 jenkins 需要有有效的证书才能建立安全连接

另请参阅:https://docs.sonarqube.org/latest/project-administration/webhooks/

或者,您可以为每个 invocation/scan 项目设置一个 webhook。 在 cli -Dsonar.webhooks.project=https://my-jenkins-domain.tld/sonarqube-webhook/ 或 sonar-project.properties onar.webhooks.project=https://my-jenkins-domain.tld/sonarqube-webhook/

我在这里看到了解决方法 https://community.sonarsource.com/t/waitforqualitygate-timeout-in-jenkins/2116/9

中间睡一觉就解决了我的问题

        }
        sleep(10)
        timeout(time: 5, unit: 'MINUTES') {