SonarQube Scanner PLUGIN para Jenkins, envía tu código a analizar a tu servidor Sonarqube

Tiempo de lectura: 4 minutos

Hola, hoy os voy a enseñar cómo instalar y enviar el código a Sonarqube usando SonarQube Scanner Plugin y Jenkins. De esta forma podemos crear un stage dentro del pipeline que se encargue de analizar el código en la integración CI/CD.

Lo primero que vamos a hacer es abrir nuestro Jenkins e ir a administrar Jenkins:

Vamos a Administrar plugins > Available plugins y buscamos SonarQube Scanner

Y pulsamos en Install Without restart

Ahora tenemos que ir a Administrar Jenkins y Global Tool Configuration.

En este punto vamos a SonarQube Scanner y pulsamos en Añadir SonarQube Scanner:

Elegimos un nombre y una versión para instalar:

Pulsamos en Apply y luego en Save.

También podemos añadir los datos del servidor SonarQube instalado, de esta forma podremos ejecutar Jobs.

Para ello vamos a Configurar el sistema > SonarQube servers

Pulsamos en Environment Variables y en Add SonarQube:

Rellenamos los datos solicitados:

Ahora añadimos la clave token, para ello elegimos Secret Text y pegamos el token de SonarCube, elegimos un ID y una descripción. Pulsamos en Apply y guardar.

Ahora la primera vez que ejecutemos un JOB nos instalará automáticamente SonnarQube, al ejecutar el task, podremos ver dónde está situado el SonarQube y podremos crear una variable de entorno que apunte a la instalación.

En este caso está en:

/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube_Scanner/

Para añadir la variable de entorno tendremos que hacer lo siguiente:

  • Accede al panel de administración de Jenkins y haz clic en «Configurar sistema».
  • Desplázate hasta la sección «Variables de entorno globales» y haz clic en el botón «Agregar».
  • En el campo «Nombre», introduce el nombre de la variable, por ejemplo «SCANNER_HOME».
  • En el campo «Valor», introduce la ruta completa donde está instalado el SonarQube Scanner en tu sistema, por ejemplo «/usr/local/sonar-scanner».
  • Haz clic en «Guardar» para guardar la configuración.

Una vez agregada la variable de entorno, podrás utilizarla en tu Jenkinsfile como ${env.SCANNER_HOME}.

Si hacemos un echo ${SCANNER_HOME} en un JOB, nos devolverá la ruta indicada:

Ahora ya podemos crear el stage dentro del jenkinsfile:

      stage('SonarQube analysis') {
            environment {
                scannerHome = "${SCANNER_HOME}"
                projectPropertiesPath = "./Server/app/sonar-project.properties"
            }
            steps {
                script {
                    def scannerCmd = "${scannerHome}bin/sonar-scanner"
                    sh "${scannerCmd} -Dproject.settings=${projectPropertiesPath}"
                }
            }
        }

Añadiendo este stage, jenkins descargará el proyecto usando git o gitlab en su local y luego aplicará este plugin desde la ruta raíz, por ello primero indicamos projectPropertiesPath con la ruta del proyecto y dónde se añade la configuración de SonarQube (este archivo está en la raíz del proyecto), sonar-project.properties:

sonar.projectKey=CLAVE_PROYECTO_SONARQUBE
sonar.projectName=NOMBRE_PROYECTO_SONARQUBE
sonar.projectVersion=1.0

sonar.sources=.

sonar.host.url=URL_SONARQUBE_DESPLEGADO
sonar.login=TOKEN_SONARQUBE_GENERADO

Con esta configuración ya podremos ejecutar SonarQube Scanner desde Jenkins.

Si queremos que la ejecución del pipeline se detenga cuándo el código no sea lo suficientemente de calidad, podemos añadir lo siguiente:

pipeline {
    agent any
    stages {
        stage('SonarQube Scan') {
            steps {
                withSonarQubeEnv('SonarQube Server') {
                    sh 'sonar-scanner'
                }
            }
        }
    }
    post {
        always {
            withSonarQubeEnv('SonarQube Server') {
                def qg = withSonarQubeQualityGate()
                if (qg.status != 'OK') {
                    error "Pipeline aborted due to quality gate failure: ${qg.status}"
                }
            }
        }
    }
}

Deja un comentario