У меня есть установка проекта Android на основе Maven для ci на cloudbees. Моя работа Jenkins просто выполняет цель «установить» после получения src из BitBucket. Все строится нормально. Единственная проблема в том, что модульные тесты не запускаются.
Выполнение точно такой же цели в IntelliJ (локально) позволяет находить и запускать модульные тесты.
Мой помпон выглядит так ->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.odl</groupId>
<artifactId>GhostRunner</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>apk</packaging>
<name>GhostRunner</name>
<properties>
<platform.version> 4.1.1.4
</platform.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${platform.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.robolectric</groupId>
<artifactId>robolectric</artifactId>
<version>2.0-alpha-1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-android</artifactId>
<version>4.45</version>
</dependency>
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-core</artifactId>
<version>4.45</version>
</dependency>
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-jdbc</artifactId>
<version>4.45</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
<assetsDirectory>${project.basedir}/assets</assetsDirectory>
<resourceDirectory>${project.basedir}/res</resourceDirectory>
<nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
<sdk>
<platform>16</platform>
</sdk>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
</plugin>
</plugins>
</build>
</project>
Вывод Дженкинса вроде этого ->
[INFO] --- maven-surefire-plugin:2.15:test (default-test) @ GhostRunner ---
[INFO] No tests to run.
mojoSucceeded org.apache.maven.plugins:maven-surefire-plugin:2.15(default-test)
[JENKINS] Recording test results
mojoStarted com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0(default-emma)
Еще один интересный момент заключается в том, что я могу удалить безошибочную зависимость, и модульные тесты по-прежнему отлично справляются с целью установки в IntelliJ. По какой-то причине Maven просто не видит тесты при запуске из Jenkins на Cloudbees.
Мудрость получена с благодарностью.
Вот что сказали мутные пчелы ::
Проблема здесь в том, что IntelliJ компилирует тестовые классы для вас и помещает эти классы в $ {project.build.testOutputDirectory} для вас.
Вы можете реплицировать этот сбой локально, заставив IntelliJ выполнить чистую установку (удерживайте ⌘ при нажатии на цели жизненного цикла)
Есть два способа решить эту проблему.
Сообщите Maven, что ваши тестовые источники находятся не в стандартном месте
Поместите ваши тестовые исходники в стандартное место.
Когда вы имеете дело с большим количеством плагинов, некоторые из которых написаны не командой Apache Maven или командой Codehaus Mojo, лучше всего использовать стандартную компоновку каталогов. Плагины, подлежащие проверке сообществами Apache Maven или Codehaus Mojo, обычно принимают изменения, когда вы сообщаете Maven, что используете нестандартный макет. Плагины, не подпадающие под этот процесс проверки, часто могут не знать, как правильно работать, и поэтому вы вынуждены соответствовать стандартному макету.
Стивен Коннолли CloudBees, Inc
Я реорганизовал свой проект, чтобы отразить норму Maven, но он все еще не запускает тесты на сервере cloudbees.
Вот соответствующий вывод из вывода консоли jenkins:
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ GhostRunner ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /scratch/jenkins/workspace/ghost runner/src/test/resources
mojoSucceeded org.apache.maven.plugins:maven-resources-plugin:2.6(default-testResources)
mojoStarted org.apache.maven.plugins:maven-compiler-plugin:3.0(default-testCompile)
[INFO] No sources to compile
[INFO]
[INFO] --- maven-compiler-plugin:3.0:testCompile (default-testCompile) @ GhostRunner ---
mojoSucceeded org.apache.maven.plugins:maven-compiler-plugin:3.0(default-testCompile)
mojoStarted org.apache.maven.plugins:maven-surefire-plugin:2.15(default-test)
[INFO]
[INFO] --- maven-surefire-plugin:2.15:test (default-test) @ GhostRunner ---
[INFO] No tests to run.
Я думаю, что важная часть
Нет источников для компиляции
Как-то до сих пор не знает, где тесты.
src/test/java
и назвали ли вы их как*Test*.java
,*Test.java
и*TestCase.java
. - person khmarbaise   schedule 26.07.2013src/main/java
для производственного кодаsrc/test/java
для модульных тестов. Более того,src/main/resources
для ресурсов, которые можно использовать в производственном коде, иsrc/test/resources
для ресурсов в модульных тестах. - person khmarbaise   schedule 26.07.2013