Как получить покрытие кода в Jenkins с помощью Jacoco и нескольких модулей?


Структура моего кода выглядит следующим образом:

События
сообщения
другое-код
функциональные тесты

В скрипте сборки для jacoco сначала нужно скопировать все классы и использовать этот каталог классов для запуска инструмента. Не могли бы вы описать шаги записи целевых каталогов здесь. Я имею в виду, как я могу упомянуть каталог, в котором выполняется покрытие кода.

При сборке каждая папка имеет свою собственную целевую папку с классами в стороне их.

Вот шаги:

  1. построить проект как работу в Дженкинсе
  2. развернуть его на пользовательской стадии
  3. выполнить задание отчета jacoco в Jenkins

Jacoco report job explanation:

  1. Шаг сборки-maven 3.3.3 цели-чистый тест и testsuite, детали этапа пользователя и другая информация передаются.

  2. Post steps-execute shell

    Не удалось отформатировать и вставить сюда, поэтому загружено здесь: https://zerobin.net/?8a988cd05bf3d752#fbzMlW1b7uzD+HZnmwnd9WjQYBI3j95Q7DCIx6q+l0U=

  3. Вызов целей maven верхнего уровня-maven 3.3.3 -Ф jacoco_pom.xml jacoco: дамп antrun:run@report

Переменная clasDir, которая использовалась в вставке оболочки, должна иметь классы. До сих пор я делал это в начале сценария оболочки.

mkdir -p target/classes
cp -R messages/target/classes target/classes

И множество clsDir = target/classes,

Таким образом, я получил отчет по этому модулю. Мой тестовый сайт содержал только один класс. Я хочу чтобы включить другие модули также, как events, other-code а также связать источники. Мне нужна помощь в том, как мне его настроить. Основная цель заключается в создании отчетов о покрытии кода функциональными тестами.

Правка:

Ответ: Ниже Ответ помог, но все это должно было быть сделано с помощью команд оболочки, а не какого-либо пользовательского интерфейса. Так, клонирование РЕПО, выполнение mvn clean package -DskipTests и копирование по всем подпапкам первого уровня из всех папок модуля помогло, но затем оно показало ошибку в покрытии несоответствие данных выполнения для файлов классов . Это означает,что класс instrumented и класс, который мы используем для покрытия, строятся отдельно разными JVM (один в Jenkins, другой в stage).

Таким образом, решение состояло в том, чтобы не клонировать и перекомпилировать их, а загрузить манифест из хранилища развертывания и распаковать все банки. Таким образом, у меня были все классы в одной версии.
1 3

1 ответ:

Чтобы включить несколько каталогов классов, изменив конфигурацию плагина Jenkins JaCoCo, вам потребуется изменить поле "путь к каталогам классов".

Например, если вы хотите включить какие-либо классы в каталоги 'events' и 'other-code', вы должны добавить следующее в раздел 'путь к каталогам классов':

**/events,**/other-code

Имейте в виду, что если вы хотите добавить несколько каталогов, Вы должны отделить каждый из них запятой, и не может быть никаких пробелов (из-за ошибки с плагином). Примечание: эта ошибка запятых относится ко всем текстовым полям в этой конфигурации плагина.

Вот моя рабочая конфигурация плагина JaCoCo: Пример Конфигурации Плагина JaCoCo

Как уже упоминалось в комментариях, одним из решений этой проблемы является использование любого инструмента сборки, с которым вы имеете дело (Ant, Maven, Gradle), чтобы удалить target (т. е.: jar, war и т. д.) в общий каталог и просто наведите туда плагин jacoco.