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?
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
@danowar Hai forse SonarQube + Jenkins + Maven e Cobertura? –