没有找到与文件模式 "**/target/*.apk" 匹配的任何构件。

10

当我尝试编译一个安卓项目时,我在Jenkins控制台上得到了这个输出: 注意,我没有更改主要的类。 以下是Jenkins控制台:

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.701s
[INFO] Finished at: Thu May 29 17:56:45 CEST 2014
[INFO] Final Memory: 24M/491M
[INFO] ------------------------------------------------------------------------
[JENKINS] Archiving /var/opt/jenkins/workspace/Android-Project-App/trunk/pom.xml to com.proj.android.project.mobile/project-android/0.0.1-SNAPSHOT/project-android-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /var/opt/jenkins/workspace/Android-Project-App/trunk/assets/build/project-android.apk to com.proj.android.project.mobile/project-android/0.0.1-20140529.155643-5/project-android-0.0.1-20140529.155643-5.apk
[JENKINS] Archiving /var/opt/jenkins/workspace/Android-Project-App/trunk/assets/build/project-android.jar to com.proj.android.project.mobile/project-android/0.0.1-20140529.155643-5/project-android-0.0.1-20140529.155643-5.jar
channel stopped
Archiving artifacts
ERROR: No artifacts found that match the file pattern "**/target/*.apk". Configuration error?
ERROR: ‘**/target/*.apk’ doesn’t match anything: ‘**’ exists but not ‘**/target/*.apk’
Build step 'Archive the artifacts' changed build result to FAILURE
IRC notifier plugin: Sending notification to: #jenkins
Finished: FAILURE

这是我的pom文件:
<?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>
    <parent>
        <groupId>com.proj</groupId>
        <artifactId>android</artifactId>
        <version>1.1-SNAPSHOT</version>
    </parent>

    <groupId>com.proj.android.project.mobile</groupId>
    <artifactId>project-android</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>project Android Application</name>
    <description>project mobile application for android client</description>
    <url>http://maven.apache.org</url>

    <issueManagement>
        <system>jira</system>
        <url>http://www/jira/browse/${jira.project.key}</url>
    </issueManagement>
    <scm>
        <connection>scm:svn:http://svn/android/project-mobile-app/trunk/</connection>
        <developerConnection>scm:svn:https://svn/android/project-mobile-app/trunk/</developerConnection>
        <url>http://svn/web/wsvn/android/project-mobile-app/</url>
    </scm>
    <dependencyManagement>
        <dependencies>
            <!-- Android dependencies -->
            <dependency>
                <groupId>android</groupId>
                <artifactId>android</artifactId>
                <scope>provided</scope>
                <version>4.0.3_r2</version>
            </dependency>
            <dependency>
                <groupId>android</groupId>
                <artifactId>support-v4</artifactId>
                <version>r6</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.maven</groupId>
                <artifactId>maven-plugin-api</artifactId>
                <version>3.1</version>
            </dependency>
            <dependency>
                <groupId>bouncycastle</groupId>
                <artifactId>bcprov-jdk14</artifactId>
                <version>138</version>
            </dependency>
            <!-- <dependency> -->
            <!-- <groupId>com.proj.android.sample</groupId> -->
            <!-- <artifactId>pdf-viewer-ng</artifactId> -->
            <!-- <type>apklib</type> -->
            <!-- <version>1.0-SNAPSHOT</version> -->
            <!-- </dependency> -->
            <dependency>
                <groupId>com.proj.project.client</groupId>
                <artifactId>project-client</artifactId>
                <version>${project-client.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <finalName>${project.artifactId}</finalName>
        <sourceDirectory>build</sourceDirectory>
        <directory>${project.basedir}/assets/build</directory>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                    <artifactId>android-maven-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <extractDuplicates>true</extractDuplicates>
                    </configuration>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>
    <properties>
        <android.version>4.0.3_r2</android.version>
        <android.sdk>15</android.sdk>
        <android.emulator.avd>AVD_15_4_0_3</android.emulator.avd>
        <jira.project.key>UNIAPPAND-1</jira.project.key>
        <junit.version>4.11</junit.version>
        <com.proj.project.client>1.0-SNAPSHOT</com.proj.project.client>
    </properties>
</project>

我认为我的问题源于目标目录,因为Jenkins提到了这一点。 我在Jenkins上有三个目录:assets,res和src。 我应该添加更多的目录吗?例如libs或target?

2个回答

14
Archive Artifacts后构建步骤与您的POM无关,它只查找工作区文件夹中的文件,即$WORKSPACE(也可以通过http://[jenkins-url]/job/[job-name]/ws进行访问),然后将这些文件存档在Jenkin的构建历史记录中。
您要存档的文件必须存在于$WORKSPACE中。根据您的配置,您正在尝试存档**/target/*.apk,表示"在任何路径下,文件夹target下的任何文件和扩展名.apk"。它找不到这个文件,因为您的工作区没有任何地方有target文件夹,因此出现错误:ERROR: ‘**/target/*.apk’ doesn’t match anything: ‘**’ exists but not ‘**/target/*.apk’ 在您的POM文件中,您有以下行: <directory>${project.basedir}/assets/build</directory> 这就是标识您的构建文件存储在哪里的位置。它是[pom文件基本目录]/assets/build,而不是target
还有,从您的控制台日志中可以看出: [JENKINS] Archiving /var/opt/jenkins/workspace/Android-Project-App/trunk/assets/build/project-android.apk 这进一步证明了您的.apk构件实际上位于trunk/assets/build下。
对于您的Archive Artifacts文件模式,您需要使用: **/assets/build/*.apk 事实上,您甚至可以只使用: **/build/*.apk或者 **/*.apk 但问题是:当您已经使用Maven存档构建物品时,您是否真的希望在Jenkins上存档构建物品(占用空间)?

你的意思是错误在这里:<finalName>${project.artifactId}</finalName> <sourceDirectory>build</sourceDirectory> <directory>${project.basedir}/assets/build</directory> - Inès Belhouchet
这不是“错误”。在您的 POM 中,您指定构建文件应该放在 ${project.basedir}/assets/build 文件夹中,但在 Jenkins 的归档配置中,您正在寻找 target 文件夹下的文件。两个位置都没有问题,但它们必须匹配。修改 Jenkins 的归档配置比更改 POM 更简单/更好。您尝试过我的建议 **/assets/build/*.apk 吗? - Slav
我有同样的问题,但我使用的是Gradle而不是Maven,但Jenkins仍然找不到我的构件。 我尝试过授予权限,但仍然没有用。 PS. 当从Jenkins UI打开工作区目录时,没有build文件夹,但当从命令行打开时却有。 我不知道发生了什么。我已经尝试使用答案中提供的模式和完整路径来查找.apk文件,但Jenkins仍然找不到它。 - Kostadin Georgiev
1
@Balflear 关于文件系统(如你所说,从命令行),每个任务都有一个 buildsworkspace 文件夹。workspace 文件夹是 Jenkins 用于每个 当前 执行的文件夹。builds 文件夹是存储 过去 构建的地方。在 builds 文件夹中,有每个过去构建的子文件夹,里面有一个 archive 文件夹(如果已配置)。Jenkins UI 的 "workspace" 链接只显示 workspace 文件夹。builds 文件夹组成了任务的 "构建历史记录" 部分。 - Slav
@Balflear 很高兴你解决了它。还有一个插件可以让你复制文件到/从从节点 https://wiki.jenkins-ci.org/display/JENKINS/Copy+To+Slave+Plugin - Slav
显示剩余2条评论

1

我想要存档 release.apk,结果遇到了和你一样的问题。Jenkins 提示我应该这样做:app/build/outputs/apk/yourAppName/release/*.apk,这解决了我的问题。

Jenkins job config snapshort


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接