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}" } } } } }
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.