有什么方法可以在 Jenkins 管道中上传工件期间更改 Nexus URL 路径

Is there any way to change the Nexus URL path during artifact upload in Jenkins pipeline

我正在尝试使用 Jenkins 管道将工件上传到 nexus,其中整个管道在最后阶段结束。工件未上传到 Nexus 存储库的地方。

说例子: http://localhost:8081/nexus/content/repositories/releases 是我现有的存储库,它正在尝试将工件上传到其中。但是当我启动 Jenkins 管道构建时,我看到 url 达到: http://localhost:8081/nexus/content/repositories/repository/releases。 我很困惑 "repository" 从哪里进入上面的 url.

我尝试编辑 url 很多次,但仍然遇到同样的问题

上传工件 blt-server.war 开始....

GroupId: 空

ArtifactId:blt-server

分类器:

类型:war

版本:0.0.1-SNAPSHOT

文件:blt-server.war

存储库:版本

正在下载:http://localhost:8081/nexus/content/repositories/repository/releases/maven-metadata.xml

正在上传:http://localhost:8081/nexus/content/repositories/repository/releases/blt-server/0.0.1-SNAPSHOT/blt-server-0.0.1-20190906.152523-1.war

完成 10% (5.5 MB / 55 MB)。

完成 20%(11 MB / 55 MB)。

完成 30%(17 MB / 55 MB)。

完成 40%(22 MB / 55 MB)。

完成 50%(28 MB / 55 MB)。

60% 已完成(33 MB / 55 MB)。

完成 70% (39 MB / 55 MB)。

80% 已完成(44 MB / 55 MB)。

90% 已完成(50 MB / 55 MB)。

100% 完成(55 MB / 55 MB)。

无法部署工件:无法在版本 (http://localhost:8081/nexus/content/repositories/repository/releases)

中找到工件:blt-server:war:0.0.1-20190906.152523-1

上传文件 blt-server.war 失败。

我希望 url 应该是这样的: http://localhost:8081/nexus/content/repositories/releases 正在上传 war 文件,但没有。

这是我的管道脚本:

pipeline {
    agent {
        label "master"
    }
    tools {
    maven "Maven-3.5.2" 
 }
 environment {
     NEXUS_VERSION = "nexus3"
     NEXUS_PROTOCOL = "http"
     NEXUS_URL = "localhost:8081/nexus/content/repositories"
     NEXUS_REPOSITORIES = "releases"
     NEXUS_CREDENTIAL_ID = "SonatypeREMNexus3"
     CREDENTIALSID= "********confidential***"
 }
 stages {
     stage("clone bitbucket") {
         steps { 
             checkout(
        [
            $class: 'GitSCM', 
            branches: [[name: 'master']], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [
                [$class: 'RelativeTargetDirectory', relativeTargetDir: 'build'] 
            ], 
            submoduleCfg: [], 
            userRemoteConfigs: [
                [
                    credentialsId: '********confidential***',
                    url: 'ssh://git@bitbucket.confidential:7999/blt/blt-server.git'
                ]
            ]
        ]
    )

             }
     }
     stage('Build & Test') {
         steps {
             script {
        withMaven(
            options: [artifactsPublisher(disabled: true)],
            jdk: 'JAVA-1.8.0_152',
            maven: 'Maven-3.5.2') {
            sh "mvn clean package -f build/pom.xml"
        }
     }
    }
     }
     stage("publish to nexus") {
         steps {
             script {
             pom = readMavenPom file: "build/pom.xml";
             filesByGlob = findFiles(glob: "build/target/*.${pom.packaging}");
             echo "${filesByGlob[0].name} ${filesByGlob[0].path} ${filesByGlob[0].directory} ${filesByGlob[0].length} ${filesByGlob[0].lastModified}"
             artifactPath = filesByGlob[0].path;
             artifactExists = fileExists artifactPath;
             if(artifactExists) {
                 echo "*** File: ${artifactPath}, group: ${pom.groupId}, packaging: ${pom.packaging}, version: ${pom.version}"
                 nexusArtifactUploader(
                 nexusVersion: NEXUS_VERSION,
                 protocol: NEXUS_PROTOCOL,
                 nexusUrl: NEXUS_URL,
                 groupId: pom.groupId,
                 version: pom.version,
                 repository: NEXUS_REPOSITORIES,
                 credentialsId: NEXUS_CREDENTIAL_ID,
                 artifacts: [
                     [artifactId: pom.artifactId,
                     classifier: '',
                     file: artifactPath,
                     type: pom.packaging],
                     [artifactId: pom.artifactId,
                     classifier: '',
                     file: "build/pom.xml",
                     type: "pom"]
                ]
            );
                 } else {
                     error "*** File: ${artifactPath}, could not be found";
                 }

             }
         }
     }
     }

 }

问题出在这里:

NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "localhost:8081/nexus/content/repositories"

指定的 Nexus 版本是 Nexus 3,但 URL 遵循 Nexus 2 格式。

Nexus 3 使用 URL 格式 /repository/<repo-id>/<path-of-file> 而 Nexus 2 使用 /content/repositories/<repo-id>/<path-of-file>.

如果您使用的是 Nexus 2,只需更新版本 NEXUS_VERSION = "nexus2"

如果在 Nexus 3 上:

  1. Nexus Artifact Uploader plugin 升级到 2.6 或更高版本。
  2. localhost:8081/nexus/content/repositories 替换为 localhost:8081/nexuslocalhost:8081,适用于您的 Nexus 存储库。

你也可以configure Nexus 3 to use legacy URL paths