web-dev-qa-db-fra.com

Comment configurer un pipeline Jenkins pour le scan de SonarQube

J'essaie de configurer un pipeline jenkins pour mon projet, mais il manque quelque chose ici, si quelqu'un peut vous dire ce que je fais de travers:

Vous trouverez ci-dessous le script de pipeline:

node {
    stage('SonarQube analysis') {
    // requires SonarQube Scanner 2.8+
    def scannerHome = tool 'sonarScanner';
    withSonarQubeEnv('SonarQube 6.2') {
      bat "${scannerHome}/bin/sonar-runner.bat"
    }
  } 
}

Ci-dessous se trouvent les configurations associées au plugin Jenkins Sonar: Sous Manage Jenkins > Configure System:  enter image description here

Sous Manage Jenkins > Global Tool Configuration enter image description here

Ci-dessous est l'erreur que je reçois:

D:\jenkins\workspace\Test_Pipeline>D:\sonar-runner-2.4/bin/sonar-runner.bat
D:\sonar-runner-2.4
SonarQube Runner 2.4
Java 1.8.0_92 Oracle Corporation (64-bit)
Windows Server 2008 R2 6.1 AMD64
INFO: Runner configuration file: D:\sonar-runner-2.4\conf\sonar-runner.properties
INFO: Project configuration file: NONE
INFO: Default locale: "en_US", source code encoding: "UTF-8"
INFO: Work directory: D:\jenkins\workspace\Test_Pipeline\.\.sonar
INFO: SonarQube Server 6.2
19:48:53.627 INFO  - Load global repositories
19:48:53.920 INFO  - Load global repositories (done) | time=298ms
19:48:53.951 WARN  - Property 'sonar.jdbc.url' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
19:48:53.951 WARN  - Property 'sonar.jdbc.username' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
19:48:53.951 WARN  - Property 'sonar.jdbc.password' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
19:48:53.951 INFO  - User cache: C:\Users\Administrator\.sonar\cache
19:48:54.378 INFO  - Load plugins index
19:48:54.378 INFO  - Load plugins index (done) | time=0ms
19:48:55.235 INFO  - Process project properties
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
Total time: 3.404s
Final Memory: 5M/120M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
ERROR: Unable to execute Sonar
ERROR: Caused by: You must define the following mandatory properties for 'Unknown': sonar.projectKey, sonar.sources
ERROR: 
ERROR: To see the full stack trace of the errors, re-run SonarQube Runner with the -e switch.
ERROR: Re-run SonarQube Runner using the -X switch to enable full debug logging.
[Pipeline] }
[Pipeline] // wrap
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

Le problème semble que Jenkins ne sait pas où est placé son.project.properties. C'est sous D:\myprj et a un contenu comme ci-dessous:

# required metadata
sonar.projectKey=my_prj:my_prj
sonar.projectName=my_prj
sonar.projectVersion=1.00
sonar.sources=my_prj/src
sonar.language=Java

Pls suggèrent comment je peux informer le pipeline Jenkins de l'emplacement du fichier sonar-project.properties

4
user5917011

Ok, je suppose que j'ai compris ce qui n'allait pas. Besoin d'ajouter un espace de travail dans mon script, puis cela a fonctionné comme suit:

stage('SonarQube analysis') {
    ws('D:\\my_prj') {
    // requires SonarQube Scanner 2.8+
    def scannerHome = tool 'sonarScanner';
    withSonarQubeEnv('SonarQube 6.2') {
      bat "${scannerHome}/bin/sonar-runner.bat"
    }
  }
}
6
user5917011

Je vois que vous utilisiez Sonar-Runner 2.4. Je pense qu'en utilisant la version 2.8, vous obtiendrez de meilleurs résultats. Ceci est ma configuration JenkinsFile, en utilisant la syntaxe Declarative Pipeline. J'avais le même problème, mais j'ai résolu le problème en renommant mon fichier sonar-project.properties, l'ancien nom était "sonar.properties" et mes recherches (les documents officiels Sonarqube ne m'ont pas aidé). J'espère que cela peut aider les autres. 

stage('Sonarqube analysis') {
    steps {
    script {
             scannerHome = tool 'SonarScanner';
        }
     withSonarQubeEnv('SonarQube') {
         bat "${scannerHome}/bin/sonar-scanner.bat" 
    }

    }
        }
1
Vivi Ch