1

cloudbees の ci 用に Maven ベースの Android プロジェクトをセットアップしています。私の Jenkins ジョブは、BitBucket から src を取得した後、「インストール」ゴールを実行しているだけです。すべてがうまく構築されます。唯一の問題は、単体テストの実行に失敗することです。

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) 

もう 1 つの興味深い点は、確実な依存関係を削除でき、単体テストが IntelliJ のインストール ゴールに対して引き続き正常に実行されることです。Cloudbees 上の Jenkins から実行すると、何らかの理由で Maven にテストが表示されません。

ありがたく頂いた知恵。

Cloudbees が言わなければならなかったことは次のとおりです ::

ここでの問題は、IntelliJ がテスト クラスをコンパイルし、それらのクラスを ${project.build.testOutputDirectory} に配置していることです。

IntelliJ にクリーン インストールを実行させることで、この失敗をローカルで再現できます (ライフサイクルの目標をクリックしながら ⌘ を押したままにします)。

この問題を解決するには 2 つの方法があります。

テスト ソースが標準の場所にないことを Maven に伝える

テストソースを標準の場所に置きます。

Apache Maven チームや Codehaus Mojo チームによって作成されたものではないプラグインを多数扱う場合は、標準のディレクトリ レイアウトを使用するのが最善の方法です。Apache Maven または Codehaus Mojo コミュニティのレビューの対象となるプラグインは、通常、非標準のレイアウトを使用していることを Maven に伝えると、変更を反映します。そのレビュー プロセスの対象とならないプラグインは、多くの場合、正しく動作する方法を認識していない可能性があり、そのため、標準のレイアウトに合わせる必要があります。

スティーブン・コノリー CloudBees, Inc

Maven 基準を反映するようにプロジェクトを再編成しましたが、まだ cloudbees サーバーでテストを実行していません。

ジェンキンスコンソール出力からの関連出力は次のとおりです::

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

重要な部分は

コンパイルするソースがありません

どういうわけか、テストがどこにあるのかまだわかりません。

4

1 に答える 1

1

上記の質問のコメントに基づいて、Maven が期待するディレクトリ構造にテスト ソース ファイルを配置していないようです。これは実際には Maven 構成の問題であり、CloudBees とは直接関係ありません (ただし、CloudBees はバニラ maven を使用してビルドを実行します)。Maven 'mvn' コマンド (CloudBees Jenkins CI ジョブのように) を使用して独自のビルドをローカルで実行しようとすると、同じエラーが発生するはずです。

標準の Maven ディレクトリ構造に基づいて、テストのソースをsrc/test/javaに配置する必要があります。

デフォルトのMavenディレクトリ構造を変更したい/変更する必要がある場合は、通常、これらを設定するためにpom.xmlで提供できる構成変更があります。しかし、多くの人は、maven との戦いは苦痛を増し、最終的に標準に戻るだけであることに気付きます。

詳細については、デフォルトの Maven テスト ディレクトリを変更する方法に関するこの stackoverflow スレッドを確認してください。

于 2013-07-30T04:06:41.527 に答える