【问题标题】:Set a SonarQube webhook in Jenkinsfile在 Jenkinsfile 中设置 SonarQube webhook
【发布时间】:2019-06-23 00:45:01
【问题描述】:

我正在尝试创建一个 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 jenkins-pipeline multibranch-pipeline


    【解决方案1】:

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

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

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

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

    或者,您可以在每次调用/扫描项目时设置一个 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/

    【讨论】:

    • 不幸的是,我不是 SonarQube 的管理员,只是我创建的项目。我应该早点指定的。谢谢
    • 也许在运行时尝试-Dsonar.webhooks.project=https://my-jenkins-domain.tld/sonarqube-webhook/? (暗中刺伤)
    • 否则,文档非常清晰。您可能需要让管理您的 sonarqube 的团队为您添加 webhook。根据文档,您最多可以配置 20 个。
    • 您的第一条评论成功了!如果你把它放在你的答案中,我会把它标记为正确的。谢谢!
    • 使用 community.sonarsource.com/t/… ,我发现我需要在脚本之间添加 sleep(10) 并调用 waitForQualityGate()
    【解决方案2】:

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

    在两者之间添加睡眠为我解决了问题

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

    【讨论】:

    • 更好地使用 webhook - 如果您的声纳会很忙并在 10 秒内返回“IN-PROCESS”,它将再次失败
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 2021-02-05
    • 1970-01-01
    • 2018-03-05
    • 2019-05-24
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    相关资源
    最近更新 更多