Как правильно интегрировать Maven, Jenkins, Sonar и Cobertura? - PullRequest
13 голосов
/ 25 октября 2011

надеюсь, что кто-то может помочь.

  • наш проект представляет собой подключаемый модуль Eclipse
  • у нас есть сервер Jenkins
  • наш проект использует Maven и Tycho (для проектов плагинов) для управления сборкой
  • мы установили сервер Sonar
  • мы интегрировали Sonar в Jenkins с помощью веб-конфигурации Jenkins

Теперь, если мы не используем сонар, все в порядке. Но если мы включим его, плагин Maven Cobertura для Sonar выдает ошибки. Все остальное (что касается вывода) в порядке.

Теперь, насколько я понимаю, происходит следующее:

  • Дженкинс строит проект
  • Sonar использует свои плагины и метрики статического анализа кода (Findbugs, PMD, RFC и т. Д.)
  • Сонар запускает плагин Cobertura
  • Cobertura пытается построить проект СНОВА
  • Cobertura не удается построить его, потому что он строит его в другом порядке
  • Cobertura терпит неудачу

Некоторые выдержки из Дженкинса:

[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"

Позже ... Порядок сборки заключается в том, что ядро ​​создается до эволюции, но эволюция, кажется, является первой вещью, которую Кобертура хочет построить ...

[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

После этого сборки всегда будут выглядеть примерно так:

[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

После предупреждения:

[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

... и последний удар в кишечник:

[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

Я предполагаю, что в Сонаре неправильный порядок сборки. Но как это может быть перемешано (поскольку Дженкинс строит проект в правильном порядке)?

А с какой стати Cobertura снова строит проект? Дженкинс уже построил его, и Cobertura может использовать скомпилированные классы оттуда ... или я что-то неправильно понимаю?

1 Ответ

12 голосов
/ 03 ноября 2011

Я только что завершил настройку сервера Jenkins моей компании с Sonar для использования в нашем проекте, построенном Maven.Вот шаги, которые мне пришлось пройти.

В моем pom.xml (версия Maven2) мне пришлось добавить следующий код:

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

На нашем сервере сборки Linux,MySQL уже был установлен, поэтому мы следовали инструкциям Wakaleo Consulting о том, как заставить Sonar общаться с MySQL.Обратите внимание на экранированный амперсанд в URL MySQL в разделе конфигурации Jenkins;Это привело нас к циклу для нескольких сборок.

Также обратите внимание, что вам не нужно включать цель sonar:sonar в линию целей Maven ... Включение сонара вУровень проекта был достаточен для нашей работы в Дженкинсе, чтобы собрать всю статистику.

Я думаю, что это покрывает ее.

...