es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo esperar a que finalice una tarea en segundo plano en un pipeline de Jenkins para el escáner de Sonar.

Tengo un pipeline de Jenkins que escanea el proyecto con el siguiente comando:

/opt/sonar-scanner/bin/sonar-scanner

Sin embargo, después de que se completa el escaneo en el pipeline de Jenkins, los resultados no se reflejan inmediatamente en SonarQube debido a que mi proyecto es muy grande y tarda al menos 10 minutos en la tarea en segundo plano.

Por lo tanto, estoy buscando una etapa de Jenkins que verifique continuamente si el escaneo del sonar se ha completado en segundo plano o no.
Una vez completado, necesito extraer los detalles del escaneo de SonarQube que he realizado.

Imagen de referencia: link

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para verificar continuamente si la exploración de Sonar está completa en segundo plano, puedes agregar una etapa de Jenkins que consulte periódicamente el servidor de SonarQube para obtener el estado de la tarea de análisis. Esto se puede lograr utilizando la API web de SonarQube.

    Aquí tienes un ejemplo de una etapa de Jenkins que consulta el estado de la tarea de análisis cada 30 segundos:

    stage('Esperar análisis de SonarQube') {
        steps {
            script {
                def analysisTaskUrl = sh(
                    script: "cat ${env.WORKSPACE}/scanner-context/shell/f00dea1d01c573d8d30a7de863c62a1a/build-wrapper-dump.json | grep sonar.analysis | cut -d '\"' -f4",
                    returnStdout: true
                ).trim()
    
                while (true) {
                    def analysisStatus = sh(
                        script: "curl -s -u ${SONARQUBE_AUTH_TOKEN}: ${analysisTaskUrl} | jq '.task.status'",
                        returnStdout: true
                    ).trim()
    
                    if (analysisStatus == '"SUCCESS"') {
                        break
                    }
    
                    sleep(time: 30, unit: 'SECONDS')
                }
            }
        }
    }
    

    Esta etapa primero extrae la URL de la tarea de análisis del archivo build-wrapper-dump.json (que es generado por el SonarScanner). Luego entra en un bucle que consulta el servidor de SonarQube cada 30 segundos para obtener el estado de la tarea utilizando el comando curl y la API web de SonarQube. El script sale del bucle una vez que el estado de la tarea es "SUCCESS".

    Una vez que se completa la tarea de análisis, puedes extraer los detalles del escaneo de SonarQube utilizando la API web de SonarQube o la interfaz de usuario de SonarQube.

Comments are closed.