You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Jenkins声明式流水线生成的ZIP包上传至Maven仓库?

解决方案

问题根源

你之前的配置存在三个核心问题:

  1. Maven默认打包类型为JAR,未指定为ZIP,导致生成空JAR包
  2. clean install会触发Maven重新构建,而非复用npm已生成的ZIP文件
  3. rtMavenDeployer的snapshotRepo指向了通用仓库,而非目标Maven快照仓库test-maven-snapshot-local

下面提供两种可行的配置方案:


方案一:通过Maven插件+rtMavenRun部署

1. 修正pom.xml配置

配置Maven识别ZIP打包类型,并关联已生成的ZIP文件:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 填写你的Maven坐标,版本需带-SNAPSHOT对应快照仓库 -->
    <groupId>com.yourcompany</groupId>
    <artifactId>arena-web-ruf</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>zip</packaging>

    <build>
        <plugins>
            <!-- 复制npm生成的ZIP到Maven构建目录 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.3.1</version>
                <executions>
                    <execution>
                        <id>copy-zip</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${project.basedir}</directory>
                                    <includes>
                                        <include>arena*.zip</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- 跳过默认JAR打包逻辑 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>

            <!-- 配置部署插件指向ZIP文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <packaging>zip</packaging>
                    <file>${project.build.directory}/arena*.zip</file>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2. 调整Jenkinsfile配置

修正仓库指向,并仅执行Maven部署动作:

// 保留原有npm构建流程
sh "npm install"
sh "npm run build:qa"
// ... 你的ZIP打包步骤

stage ('Artifactory Config') {
    steps {
        rtServer (
            id: 'Artifactory',
            url: 'https://artifactory.fis.dev/artifactory',
            credentialsId: '9134676',
            timeout: 300
        )

        rtMavenDeployer (
            id: "MAVEN_DEPLOYER",
            serverId: "Artifactory",
            releaseRepo: "test-maven-release-local", // 可选,对应你的Maven发布仓库
            snapshotRepo: "test-maven-snapshot-local" // 目标Maven快照仓库
        )

        rtMavenResolver (
            id: "MAVEN_RESOLVER",
            serverId: "Artifactory",
            releaseRepo: "apache-maven-remote",
            snapshotRepo: "apache-maven-remote"
        )
    }
}

stage ('Deploy to Maven Repo') {
    steps {
        rtMavenRun (
            tool: "maven-3.2.5",
            pom: 'pom.xml',
            goals: 'deploy', // 仅执行部署,跳过clean/install避免重复构建
            deployerId: "MAVEN_DEPLOYER",
            resolverId: "MAVEN_RESOLVER"
        )
    }
}

// 保留原有通用仓库上传步骤(如果需要)
stage ('Upload to Generic Repo') {
    steps {
        rtUpload (
            serverId: 'Artifactory',
            spec: '''{
                  "files": [
                    {
                      "pattern": "arena*.zip",
                      "target": "my-generic-snapshot-local/packages/"
                    }
                 ]
            }''',
        )
    }
}

stage ('Build Info') {
    steps {
        rtBuildInfo (
            maxBuilds: 50,
            deleteBuildArtifacts: true
        )
    }
}

方案二:直接用rtUpload上传到Maven仓库(更简洁)

如果不想配置Maven插件,可直接通过rtUpload将ZIP和pom文件上传到符合Maven规范的路径:

// 保留原有npm构建流程
sh "npm install"
sh "npm run build:qa"
// ... 你的ZIP打包步骤

stage ('Artifactory Config') {
    steps {
        rtServer (
            id: 'Artifactory',
            url: 'https://artifactory.fis.dev/artifactory',
            credentialsId: '9134676',
            timeout: 300
        )
    }
}

// 上传到Maven仓库
stage ('Upload to Maven Repo') {
    steps {
        rtUpload (
            serverId: 'Artifactory',
            spec: '''{
                  "files": [
                    {
                      "pattern": "arena*.zip",
                      "target": "test-maven-snapshot-local/com/yourcompany/arena-web-ruf/1.0.0-SNAPSHOT/arena-web-ruf-1.0.0-SNAPSHOT.zip"
                    },
                    {
                      "pattern": "pom.xml",
                      "target": "test-maven-snapshot-local/com/yourcompany/arena-web-ruf/1.0.0-SNAPSHOT/arena-web-ruf-1.0.0-SNAPSHOT.pom"
                    }
                 ]
            }''',
        )
    }
}

// 保留原有通用仓库上传和Build Info步骤
stage ('Upload to Generic Repo') {
    steps {
        rtUpload (
            serverId: 'Artifactory',
            spec: '''{
                  "files": [
                    {
                      "pattern": "arena*.zip",
                      "target": "my-generic-snapshot-local/packages/"
                    }
                 ]
            }''',
        )
    }
}

stage ('Build Info') {
    steps {
        rtBuildInfo (
            maxBuilds: 50,
            deleteBuildArtifacts: true
        )
    }
}

注意替换com/yourcompany、1.0.0-SNAPSHOT为你的实际Maven坐标信息。


内容的提问来源于stack exchange,提问作者vel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:33:28