2011-10-25 13 views
13

spero che qualcuno possa aiutare.Come integrare correttamente Maven, Jenkins, Sonar e Cobertura?

  • nostro progetto è un progetto plug-in Eclipse
  • abbiamo un server Jenkins
  • nostro progetto utilizza Maven e Tycho (per i progetti plug-in) per la gestione di build
  • abbiamo installato un server Sonar
  • abbiamo integrato Sonar in Jenkins utilizzando il Jenkins Web-Config

Ora, se non usiamo Sonar, va tutto bene. Ma se lo accendiamo, il plugin Maven Cobertura per Sonar genera errori. Tutto il resto (per quanto riguarda l'output) va bene.

Ora, da quanto ho capito, accade quanto segue:

  • Jenkins costruisce il progetto
  • Sonar utilizza i suoi plugin e le metriche (FindBugs, PMD, RFC, etc.)
  • analisi statica del codice Sonar inizia il plugin Cobertura
  • Cobertura cerca di costruire di nuovo il progetto
  • Cobertura non riesce a costruire, perché si costruisce in un ordine diverso
  • 01.235.
  • Cobertura non riesce

Alcuni estratti di uscita da Jenkins:

[INFO] ------------------------------------------------------------------------ 
[INFO] Building Project 
[INFO] ------------------------------------------------------------------------ 

[WARNING] The following dependencies could not be resolved at this point of the build but seem to be part of the reactor: 

[WARNING] o de.tool.core:de.tool.core:eclipse-plugin:1.2.0-SNAPSHOT (provided) 

[WARNING] Try running the build up to the lifecycle phase "package" 

tardi ... L'ordine di build è che il nucleo è costruito prima che l'evoluzione, ma l'evoluzione sembra essere la prima cosa Cobertura vuole costruire ...

[INFO] Execute maven plugin cobertura-maven-plugin... 
[INFO] Execute org.codehaus.mojo:cobertura-maven-plugin:2.5:cobertura... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building de.tool.evolution 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.evolution >>> 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 35.240s 
[INFO] Finished at: Tue Oct 25 11:28:29 CEST 2011 
[INFO] Final Memory: 57M/231M 

Dopo che la costruisce sempre ammontano a qualcosa di simile:

[INFO] ------------------------------------------------------------------------ 
[INFO] Building de.tool.core 1.2.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.core >>> 
[INFO] 
[INFO] --- tycho-packaging-plugin:0.13.0:build-qualifier (default-build-qualifier) @ de.tool.core --- 
[INFO] 
[INFO] --- tycho-packaging-plugin:0.13.0:validate-id (default-validate-id) @ de.tool.core --- 
[INFO] 
[INFO] --- tycho-packaging-plugin:0.13.0:validate-version (default-validate-version) @ de.tool.core --- 
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ de.tool.core --- 
[INFO] Using 'Cp1252' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /var/lib/jenkins/jobs/testBuild/workspace/de.tool.core/src/main/resources 
[INFO] 
[INFO] --- tycho-compiler-plugin:0.13.0:compile (default-compile) @ de.tool.core --- 
[INFO] Using compile source roots from build.properties 
[INFO] Nothing to compile - all classes are up to date 
[INFO] 
[INFO] --- cobertura-maven-plugin:2.5:instrument (default-cli) @ de.tool.core --- 
[INFO] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file 
Instrumenting 88 files to /var/lib/jenkins/jobs/testBuild/workspace/de.tool.core/target/generated-classes/cobertura 
Cobertura: Saved information on 88 classes. 
Instrument time: 256ms 

[INFO] Instrumentation was successful. 
[INFO] NOT adding cobertura ser file to attached artifacts list. 
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ de.tool.core --- 
[INFO] Using 'Cp1252' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /var/lib/jenkins/jobs/testBuild/workspace/de.tool.core/src/test/resources 
[INFO] 
[INFO] <<< cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.core <<< 
[INFO] 
[INFO] --- cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.core --- 
[INFO] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file 
Cobertura: Loaded information on 88 classes. 
Report time: 800ms 

[INFO] Cobertura Report generation was successful. 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 50.133s 
[INFO] Finished at: Tue Oct 25 11:28:44 CEST 2011 
[INFO] Final Memory: 33M/263M 

Seguito da avvertimenti:

[INFO] Java bytecode scan... 
[WARN] Class 'de/tool/core/util/EObjectUtil' is not accessible through the ClassLoader. 
[INFO] Java bytecode scan done: 105 ms 
... 
The following classes needed for analysis were missing: 
    de.tool.core.util.EObjectUtil 

... e un pugno nello stomaco finale:

[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] de.tool.core ............................... SUCCESS [2.364s] 
[INFO] de.tool.evolution .......................... FAILURE [0.023s] 
... 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1:52.418s 
[INFO] Finished at: Tue Oct 25 11:29:46 CEST 2011 
[INFO] Final Memory: 51M/411M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal on project de.tool.evolution: Could not resolve dependencies for project de.tool.evolution:de.tool.evolution:eclipse-plugin:1.0.0-SNAPSHOT: Could not find artifact de.tool.core:de.tool.core:eclipse-plugin:1.2.0-SNAPSHOT -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project de.tool.evolution: Could not resolve dependencies for project de.tool.evolution:de.tool.evolution:eclipse-plugin:1.0.0-SNAPSHOT: Could not find artifact de.tool.core:de.tool.core:eclipse-plugin:1.2.0-SNAPSHOT 

La mia ipotesi è che l'ordine di generazione non è corretta in Sonar. Ma come sarebbe confuso (dal momento che Jenkins costruisce il progetto nell'ordine corretto)?

E perché sulla Terra Cobertura ricostruisce il progetto? Jenkins lo ha già costruito e Cobertura potrebbe usare le lezioni compilate da lì ... o sto fraintendendo qualcosa?

+3

Non riesco a rispondere alla domanda principale, ma penso che Cobertura abbia bisogno di ricostruire il progetto per tessere il codice che cattura le informazioni sulla copertura (usato in seguito da Sonar). È frustrante che il codice venga creato due volte. Nel nostro caso abbiamo spostato tutta l'analisi del codice/copertura in un lavoro separato di Jenkins e l'abbiamo eseguito ogni notte perché ci vuole troppo tempo. – maximdim

+0

@danowar Hai forse SonarQube + Jenkins + Maven e Cobertura? –

risposta

12

Ho appena completato la configurazione del server Jenkins della mia azienda con Sonar per l'utilizzo con il nostro progetto Maven. Quindi ecco i passi che ho dovuto attraversare.

Nel mio pom.xml (versione Maven2), ho dovuto aggiungere il seguente codice:

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>sonar-maven-plugin</artifactId> 
      <version>1.0-beta-2</version> 
     </plugin> 

Sul nostro server Linux di compilazione, avevamo già installato MySQL, quindi abbiamo seguito le istruzioni da Wakaleo Consulting su come ottenere Sonar a parlare con MySQL. Si noti la e commerciale con escape nell'URL MySQL nella sezione di configurazione di Jenkins; che ci ha gettato per un loop per alcune build.

Inoltre, prendere atto che si non si necessità di includere la sonar:sonar bersaglio sulla linea target Maven ... L'attivazione di sonar a livello di progetto è stato sufficiente per il nostro lavoro Jenkins per raccogliere tutte le sue statistiche.

Penso che lo copra.

+0

Dead link to Wakaleo. –

+0

Un-zombified il collegamento Wakaleo. – Mike