2013-07-25 2 views
1

cloudbees에서 ci 용 Maven 기반 Android 프로젝트 설정이 있습니다. My Jenkins의 일은 BitBucket에서 src를 검색 한 후 '설치'목표를 실행하는 것입니다. 모든 것이 잘됩니다. 유일한 문제는 단위 테스트가 실행되지 않는다는 것입니다.Maven에서 cloudbees에 대한 단위 테스트를 수행하지 못했습니다.

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를 실행할 때 테스트를 보지 않고 있습니다.

지혜는 감사하게 받았습니다. 여기

는 cloudbees 말을 ::했다 무엇

여기서 문제는 IntelliJ에 당신 의 테스트 클래스를 컴파일하고 $ {project.build.testOutputDirectory}에 대한에 해당 클래스를 가하고 있다는 점이다 당신.

당신은이 문제를 해결하는 방법은 두 가지가 있습니다

(라이프 사이클 목표에 클릭하는 동안 ⌘를 보유) 인 IntelliJ가 깨끗한 설치 실행 얻어서 로컬이 실패를 복제 할 수 있습니다.

는 테스트 소스가 표준 위치에 있지 않은 것을 메이븐에게

표준 제자리에 테스트 소스를 넣습니다.

아파치 메이븐 팀 또는 Codehaus 모조 팀 를 작성하지 일부 플러그인을 많이 다루고는 표준 디렉토리 레이아웃으로가는 가장 좋은 방법입니다. Apache Maven 또는 Codehaus Mojo 커뮤니티에 대한 리뷰의 대상인 플러그인은 보통 비표준 레이아웃을 사용 중이라고 Maven에 알릴 때 은 변경 사항을 적용합니다. 해당 리뷰 프로세스의 적용을받지 않는 플러그인은 은 제대로 작동하는 방법을 모르는 경우가 많으므로 이 표준 레이아웃과 맞춰야합니다. 나는 메이븐 규범을 반영하기 위해 내 프로젝트를 다시 구성했습니다하지만 여전히 cloudbees 서버에서 테스트를 실행하지 스티븐 코놀리 CloudBees, Inc의

.

여기

없음 소스는 어떻게 든

컴파일 할 젠킨스 콘솔 출력 ::

[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. 

내가 중요한 비트가 생각에서 관련 출력하지 여전히 않습니다이다 테스트가 어디에 있는지 알 수 있습니다.

+0

단위 테스트를 어디에서 찾았습니까? 'src/test/java'라고 이름을 붙이고 ['* Test * .java','* Test.java','* TestCase.java']와 같은 이름을 붙였습니다. (http://maven.apache.org/surefire/maven -surefire-plugin/test-mojo.html # includes). – khmarbaise

+0

은/src/test에 있으며 모두 테스트 형식으로 이름이 지정됩니다. 테스트 폴더 아래의 java 폴더가 중요하다고 생각하십니까? –

+0

예, 필요합니다. [Maven의 기본 설정] (http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html)'src/main/java'입니다. 단위 테스트를위한 생산 코드'src/test/java'. 생산 코드에서 사용할 수있는 리소스는'src/main/resources'를, 유닛 테스트에서는 리소스를 위해'src/test/resources'를 추가합니다. – khmarbaise

답변

1

위 질문에 대한 의견을 바탕으로 Maven에서 예상하는 디렉토리 구조에 테스트 소스 파일을 넣지 않은 것으로 보입니다. 이것은 실제로 Maven 구성 문제이며 CloudBees와 직접적인 관련이 없습니다 (CloudBees가 빌드를 실행하는 데 vanilla maven을 사용한다는 점을 제외하고). maven 'mvn'명령 (예 : CloudBees Jenkins CI 작업)을 통해 로컬로 빌드를 실행하려고하면 같은 오류가 발생합니다. standard Maven directory structure을 바탕으로

, 당신이 당신의 검사 결과에 대한 소스를 배치해야합니다 기본 받는다는 디렉토리 구조를 변경하려면/필요합니다 SRC/테스트/자바

, 일반적 구성은이 변경된다 pom.xml에이를 설정할 수 있습니다. 그러나 많은 사람들은 Maven과의 싸움이 더 많은 고통을 가져오고 궁극적으로 표준으로 돌아가는 것을 발견합니다.

자세한 내용은이 스택 오버 플로우 스레드를 how to change the default Maven tests directory에 대해 확인하십시오.

+0

그게 재미있는 일입니다. 위에서 언급 한대로 예상되는 위치에 모든 src 코드를 배치하도록 프로젝트 구조를 수정했으며 테스트는 아직 클라우드에서 실행되지 않습니다. 'mvn clean'과 'mvn install'다음에 cmd 행을 로컬에서 실행하면 테스트가 모두 실행됩니다. 문제는 클라우드 빌드가 어떤 이유로 테스트 소스를 찾을 수없는 것으로 보입니다. –

+0

CloudBees에서 지원 티켓을 열면 도움을받을 수 있습니다. – swashbuck1r

+0

Cloudbees에서 도와 주신 모든 분들께 감사드립니다. 결국 문제는 저였습니다. 내 프로젝트 구조를 재 배열 할 때 나는 어떻게 든 그것의 많은 부분 (소스)을 버전 관리에서 제거하여 IntelliJ에서 '변경'으로 나타나지 않았다. 로컬에서는 모든 것이 작동했지만 bitbucket 레포는 비어있었습니다. 열심히 노력해야합니다 :) –