Почему pitest работает с maven в командной строке, а не в Jenkins-Pipeline? - PullRequest
1 голос
/ 07 июня 2019

У меня есть странная проблема, по которой я не смог найти причину:

При использовании pitest с maven (и java 11) в командной строке он работает, как и ожидалось, но при запуске его на Jenkins-Сервер через декларативный конвейер приводит к ошибке.

Часть из моего maven pom:

<build>
  <plugins>
    <plugin>
      <groupId>org.pitest</groupId>
      <artifactId>pitest-maven</artifactId>
      <version>1.4.8</version>
      <dependencies>
        <dependency>
          <groupId>org.pitest</groupId>
          <artifactId>pitest-junit5-plugin</artifactId>
          <version>0.8</version>
        </dependency>
      </dependencies>
      <configuration>
        <verbose>true</verbose>
      </configuration>
    </plugin>
  </plugins>
</build>

Часть из моего Jenkinsfile:

stage('MutationTesting')
 {
  steps
   {
    bat 'mvn --batch-mode org.pitest:pitest-maven:mutationCoverage'
   }
 }

До этого следующий mavenкоманды будут вызываться из конвейера:

mvn - очистка в пакетном режиме

mvn - компиляция в пакетном режиме

mvn - компилятор в пакетном режиме: testCompile surefire: test -Dmaven.test.failure.ignore = true

При вызове именно этих команд в командной строке pitest работает отлично.

При сравнении результатов ведения журнала, затемони почти равны.

Вывод журнала из командной строки:

PIT >> FINE: Максимально доступная память составляет 3609 МБ

PIT >> FINE: MINION: УстановкаPIT агент

PIT >> ИНФОРМАЦИЯ: Отправка 13 тестаклассы для minion

PIT >> ИНФОРМАЦИЯ: Отправленные тесты для minion

PIT >> ИНФОРМАЦИЯ: MINION: 08:51:20 PIT >> FINE: Ожидается 13 тестовых классов от родителя

PIT >> FINE: получены тестовые классы

PIT >> INFO: проверка среды

PIT >> INFO: MINION: 08:51:20 PIT >> INFO: найдено 1 тестов

PIT >> INFO: МИНИОН: 08:51:20 PIT >> INFO: Анализ зависимостей уменьшил количество потенциальных тестов на 0

PIT >> INFO: MINION: 08:51:20PIT >> INFO: получено 1 тестов

PIT >> INFO: MINION: 08:51:20 PIT >> FINE: работает 1 единица

PIT >> INFO: MINION: 08:51: 20 PIT >> FINE: Сбор покрытия для теста Описание [testClass = de.test.Tests, name = creation ()]

PIT >> FINE: Генератор покрытия Миньон вышел нормально

PIT>> ИНФОРМАЦИЯ: Расчетное покрытие за 0 секунд.

PIT >> FINE: Использованная память после расчета покрытия 42 мб

PIT >> FINE: Свободная память после расчета покрытия 201 мb

[... обрезание выходных данных мутаций]

Вывод журнала из Jenkins-Pipeline:

PIT >> FINE: Максимально доступная память составляет 1813mb

PIT >> FINE: MINION: установка агента PIT

PIT >> INFO: отправка 13 тестовых классов в minion

PIT >> INFO: отправка тестов в minion

PIT >> ИНФОРМАЦИЯ: МИНИОН: 08:46:28 PIT >> FINE: ожидается 13 тестовых классов от родителя

PIT >> FINE: тестирует полученные классы

PIT>> ИНФОРМАЦИЯ: Проверка среды

PIT >> ИНФОРМАЦИЯ: MINION: 08:46:29 PIT >> ИНФОРМАЦИЯ: Найдено 1 тестов

PIT >> ИНФОРМАЦИЯ: MINION: 08:46:29 PIT>> ИНФОРМАЦИЯ: Анализ зависимостей уменьшил число потенциальных тестов на 0

PIT >> ИНФОРМАЦИЯ: MINION: 08:46:29 PIT >> ИНФОРМАЦИЯ: получено 1 тестов

PIT >> ИНФОРМАЦИЯ:MINION: 08:46:29 PIT >> FINE: работает 1 единица

PIT >> INFO: MINION: 08:46:29 PIT >> FINE: сбор покрытия для теста Описание [testClass = de.test.Тесты, имя = создание ()]

PIT >> FINE: Генератор покрытия Миньон вышел, ok PIT >> INFO: Расчетное покрытие за 1 секунду.PIT >> FINE: использованная память после расчета покрытия 43 mb PIT >> FINE: свободная память после расчета покрытия 177 mb PIT >> INFO: Создано 0 единиц измерения мутации [INFO] ------------------------------------------------------------------------ [INFO] СБОЙ СТРОИТЕЛЬСТВА [INFO] ------------------------------------------------------------------------ [INFO] Общее время: 3.644 с [INFO]Закончено: 2019-06-06T08: 46: 29 + 02: 00 [ИНФО] ------------------------------------------------------------------------[ОШИБКА] Не удалось выполнить цель org.pitest: pitest-maven: 1.4.8: mutationCoverage (default-cli) в мультизагрузчике проекта: выполнение default-cli цели org.pitest: pitest-maven: 1.4.8: ошибка mutationCoverage:Мутации не найдены.Это, вероятно, означает, что есть проблема с предоставленным classpath или фильтрами.[ОШИБКА] См. http://pitest.org для более подробной информации.

Так что я могу только предположить, что есть разница в окружающей среде - но какая?Или это ошибка в питесе?

1 Ответ

0 голосов
/ 09 июня 2019

Наиболее вероятная проблема заключается в том, что pitest выполняется jenkins в среде, где тесты не были скомпилированы.

Наиболее надежный подход - привязать pitest к фазе теста в профиле, а не вызыватьнепосредственно к цели.

<profile>
  <id>pitest</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.pitest</groupId>
          <artifactId>pitest-maven</artifactId>
          <version>1.4.8</version>
          <executions>
            <execution>
              <id>pitest</id>
              <phase>test</phase>
              <goals>
                <goal>mutationCoverage</goal>
              </goals>
            </execution>
          </executions>  
        </plugin>
      </plugins>

Затем можно запустить Pitest с помощью

mvn -Ppitest test
...