Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set a SonarQube webhook in Jenkinsfile

I'm trying to create a Jenkins multibranch pipeline where on every push to bitbucket, a SonarQube analysis is performed on that branch of the project. Jenkins correctly creates the new job for each branch and a new project is created in SonarQube with the branch name appended to the project name.

The issue I'm having is that when SonarQube creates the new project, the webhook to report the Quality Gate status is not set by default, so I have to manually go into each SonarQube project and set the Webhook url. This is an issue when my team makes many branches a day.

Is there a way to specify in my Jenksfile that I want the SonarQube project to have a 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}"
                    }
                }
            }
        }
    }

Currently, my Jenkins build times out after 5 minutes. When the webhook is set, it takes a few seconds to hear back. My webhook url is correct, I just want the Jenkinsfile to set it, not me manually.

EDIT: Unfortunately, I am not an admin in SonarQube, only my projects

like image 700
DarkHark Avatar asked Jan 29 '19 19:01

DarkHark


People also ask

How do you set a Webhook in SonarQube?

To set your secret in SonarQube: From the project or organization where you're securing your webhooks, navigate to the webhooks settings at Project Settings > Webhooks. You can either click Create to create a new webhook or click an existing webhook's settings drop-down and click Update.

How do I run SonarScanner in Jenkins?

Install the SonarScanner for Jenkins via the Jenkins Update Center . Configure your SonarQube server(s): Log into Jenkins as an administrator and go to Manage Jenkins > Configure System. Scroll down to the SonarQube configuration section, click Add SonarQube, and add the values you're prompted for.


2 Answers

As admin in sonarqube, go to https://my-sonarqube.tld/admin/webhooks configure the url to be https://my-jenkins-domain.tld/sonarqube-webhook/

This should then apply to all projects. If you are still not receiving deliveries, check recent deliveries (option in same page) and view error.

Your jenkins will need to have a valid certificate for a secure connection to be established

See also: https://docs.sonarqube.org/latest/project-administration/webhooks/

Alternatively, you can set a webhook per invocation/scan of a project. Either on the cli -Dsonar.webhooks.project=https://my-jenkins-domain.tld/sonarqube-webhook/ or in sonar-project.properties onar.webhooks.project=https://my-jenkins-domain.tld/sonarqube-webhook/

like image 151
metalisticpain Avatar answered Sep 28 '22 06:09

metalisticpain


I saw a workaround here https://community.sonarsource.com/t/waitforqualitygate-timeout-in-jenkins/2116/9

Adding a sleep in between is solving the issue for me

        }
        sleep(10)
        timeout(time: 5, unit: 'MINUTES') {
like image 39
jandry Avatar answered Sep 28 '22 06:09

jandry