Comment puis-je correctement intégrer Maven, Jenkins, Sonar et Cobertura?

espère que quelqu'un peut vous aider.

  • notre projet est un plug-in Eclipse projet
  • nous avons un serveur Jenkins
  • notre projet utilise Maven et Tycho (pour les plug-in de projets) pour construire la gestion
  • nous avons installé un serveur Sonar
  • nous avons intégré Sonar à Jenkins en utilisant le Web de Jenkins-Config

Maintenant, si nous n'utilisons pas de Sonar, tout est ok. Mais si nous nous tournons sur, le Maven Cobertura plugin Sonar jette les erreurs. Tout le reste (autant que la sortie passe) est très bien.

Maintenant, ce que je comprends, les événements suivants se produise:

  • Jenkins construit le projet
  • Sonar utilise son analyse de code statique des plugins et des métriques (Findbugs, PMD, RFC, etc.)
  • Sonar commence la Cobertura plugin
  • Cobertura essaie de construire le projet de NOUVEAU
  • Cobertura ne pas réussir la construction parce qu'il a construit dans un ordre différent
  • Cobertura échoue

Quelques extraits de 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"

Plus tard...l'ordre de La génération, c'est que de base est construit avant l'évolution, mais l'évolution semble être la première chose Cobertura veut construire...

[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

Après que les versions toujours à quelque chose comme ceci:

[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

Suivi des mises en garde:

[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

...et un dernier coup de poing dans l'intestin:

[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

Ma conjecture est que l'ordre de construction est incorrecte dans Sonar. Mais comment pourrait-il obtenir brouillé (depuis Jenkins construit le projet dans le bon ordre)?

Et pourquoi sur la Terre ne Cobertura construire le projet de nouveau? Jenkins déjà construit et Cobertura pourrait utiliser les classes compilées à partir de là...ou suis-je malentendu quelque chose?

Je ne peux pas répondre à la question principale, mais je pense que la Couverture des besoins de reconstruction projet pour tisser le code de capture de couverture de l'info (utilisé plus tard par Sonar). C'est frustrant que le code est en train de construire deux fois. Dans notre cas, nous avons déménagé tous les code d'analyse et de couverture en séparer Jenkins, de l'emploi et en cours d'exécution tous les soirs parce qu'il prend trop de temps.
Avez-vous peut-être SonarQube + Jenkins + Maven et Cobertura ?

OriginalL'auteur danowar | 2011-10-25