2015-08-18 7 views
0

У нас есть проект с несколькими модулями maven. Мы используем jacoco для анализа покрытия кода. Я подготовил файл pom для запуска тестовых примеров и получения покрытия кода. Когда я строю проект на своем локальном, я вижу покрытие кода на панели управления сонара. После нажатия на изменения в github и при запуске сборки jenkins покрытие кода недоступно на приборной панели сонара. Я обнаружил следующую ошибку в журналах сборки jenkins. Информация о покрытии не была собрана. Возможно, вы забыли включить отладочную информацию в скомпилированные классы?Сонар, не отображающий покрытие кода после сборки jenkin

Как я могу сделать покрытие кода доступным после сборки jenkins?

+1

Каких команд управляют вашей Дженкинс, чтобы построить свой проект? это команда, аналогичная той, которую вы запускаете на вашей локальной машине? вы можете найти отчет jacoco, созданный jenkins build в рабочем пространстве jenkins? – benzonico

+1

Можете ли вы опубликовать более подробный журнал, чтобы мы могли видеть, что происходит. Кроме того, почему вы используете Jacoco отдельно от SonarQube? SonarQube встроен в Jacoco для своих собственных показателей покрытия кода. – Seb

ответ

0

Вы должны убедиться, что при компиляции кода Java или Groovy etc опция debug включена. Я использую Gradle (вместо Maven) и для включения опции debug, я делаю что-то вроде этого в Gradle. Вы можете поместить следующий код в файл build.gradle OR верхнего уровня $ GRADLE_HOME/init.d/some-global.gradle (внутри раздела allprojects {...}).

tasks.withType(JavaCompile) { 
    options.debug = true 
    options.compilerArgs = ["-g"] 
    } 

    tasks.withType(GroovyCompile) { 
     options.debug = true 
    } 

Сделайте то же самое в Maven (как включить опцию отладки на использовании -g для Java и верно для проектов на основе Groovy).

После этого все, что вам нужно, это убедиться, что ваши параметры sonar.xx.yyy установлены правильно при вызове сонара (например, sonarRunner task in Gradle).

Я установил эти переменные как (UT для модульных тестов, IT для интеграционных тестов). Покрытие кода ИТ будет генерироваться только в том случае, если вы присоедините jacocoagent.jar к Tomcat/внешнему JVM (вместо того, что JVM Gradle/Maven), который запускает файл .war/.ear вашего приложения.

-Dsonar.jacoco.itReportPath=build/jacoco/IT/jacocoIT.exec 
-Dsonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec 

Есть и другие переменные sonar.xx.yy, которые вы можете видеть в Интернете/документах.

В Maven, вы можете включить Java отладку на использование этого:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <debug>true</debug> 
     <debuglevel>lines,vars,source</debuglevel> 
    </configuration> 
    </plugin>