Подтвердить что ты не робот

Как правильно интегрировать Maven, Jenkins, Sonar и Cobertura?

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

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

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

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

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

Некоторые выдержки из 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"

Позже... Порядок сборки - это то, что ядро ​​построено до эволюции, но эволюция, похоже, является первым, что Cobertura хочет построить...

[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

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

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

4b9b3361

Ответ 1

Я только что завершил настройку моего сервера 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... Включение Sonar на уровне проекта было достаточно для того, чтобы наша работа Jenkins собирала всю статистику.

Я думаю, что обложки.