У меня есть следующая задача, которую я хотел бы решить. Вот текущая установка:
- Дженкинс
- Мавен
- СонарКьюб
- Java-приложение с несколькими модулями
Итак, в настоящее время в Jenkins у нас есть 2 сборки: одна для обычной доставки, а другая для создания отчетов сонара.
Что мы хотели бы сделать, так это сгенерировать сборку со строкой аргументов JaCoCo и отправить ее нашей команде контроля качества, чтобы получить более качественные цифры покрытия, которые мы могли бы добавить или объединить с числами, сгенерированными сборкой сонара, которую мы делаем каждый раз. день. Сборка, отправленная в QA, будет установлена на другом сервере, отличном от того, с которого мы создаем сборку.
Что было бы лучшим подходом для выполнения этого. В конце концов, мы хотели бы также получать отчеты JaCoCo с наших рабочих станций разработчиков и добавлять эти числа на нашу страницу сонара.
EDIT 1 Благодаря подробностям, представленным в этой теме, я смог запустить свое многомодульное приложение со следующей опцией JVM: "-javaagent:${MAIN_DIR}/lib/jacocoagent.jar==destfile=/jacoco.exec,output=tcpserver,address=*"
В моей сборке Jenkins у меня есть следующие предварительные шаги: задача ant, которая вызывает target jacocoReport. Используемый для этой цели файл build.xml имеет следующий код:
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="/opt/hudson/tools/jacocoant.jar"/>
</taskdef>
<target name="jacocoReport">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>
<target name="jacocoReset">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
<delete file="${jacocoReportFile}"/>
</target>
And finally I have a maven build step which calls sonar:sonar
Вот раздел в POM, относящийся к моему отчету об интеграции;
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.itReportPath>${WORKSPACE}/it-jacoco.exec</sonar.jacoco.itReportPath>
<sonar.language>java</sonar.language>
<sonar.branch>9.9.5</sonar.branch>
Когда сборка завершается, моя запись Sonar по-прежнему показывает 0% для моих интеграционных тестов. Но когда я беру тот же отчет it-jacoco.exec и импортирую его с помощью сеанса покрытия импорта Jacoco в Eclipse, я получаю охват 26%.
Наконец, когда я просматриваю свои журналы сборки Jenkins, я вижу следующее:
Sensor JaCoCoItSensor...
Analysing /var/lib/jenkins/workspace/XXXXXX/it-jacoco.exec
No information about coverage per test.
Sensor JaCoCoItSensor done: 34 ms