【问题标题】:Q: How can I save an artifact into Nexus Repository using a groovy pipeline?问:如何使用 groovy 管道将工件保存到 Nexus 存储库中?
【发布时间】:2019-06-15 14:22:30
【问题描述】:

我的问题是关于将工件保存到存储库中。特别是,我正在尝试在执行 Maven 项目的构建管道(通过 Jenkins)之后上传到 Nexus Repository 工件和发布版本。

我想要这样做的唯一方法就是使用用 Groovy 编写的管道以便与 Jenkins 集成。

注意:我希望工件版本号始终相同,并且版本号动态(而不是手动)更改。

是否有一般的命令或代码可以让我做到这一点?

【问题讨论】:

    标签: jenkins continuous-integration repository jenkins-pipeline nexus


    【解决方案1】:

    你在错误的级别,这应该发生在 maven 中。 在 pom.xml 你需要。 (more here)

    <distributionManagement>
       <snapshotRepository>
          <id>nexus-snapshots</id>
          <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
       </snapshotRepository>
    </distributionManagement>
    

    然后在插件部分

    <plugin>
       <artifactId>maven-deploy-plugin</artifactId>
       <version>2.8.2</version>
       <executions>
          <execution>
             <id>default-deploy</id>
             <phase>deploy</phase>
             <goals>
                <goal>deploy</goal>
             </goals>
          </execution>
       </executions>
    </plugin>
    

    并且您应该能够从您的管道中执行mvn clean deploy。

    编辑 Nexus Artifact Uploader plugin还有另一种方法

      nexusArtifactUploader {
        nexusVersion('nexus2')
        protocol('http')
        nexusUrl('localhost:8080/nexus')
        groupId('sp.sd')
        version("2.4.${env.BUILD_NUMBER}")
        repository('NexusArtifactUploader')
        credentialsId('44620c50-1589-4617-a677-7563985e46e1')
        artifact {
            artifactId('nexus-artifact-uploader')
            type('jar')
            classifier('debug')
            file('nexus-artifact-uploader.jar')
        }
        artifact {
            artifactId('nexus-artifact-uploader')
            type('hpi')
            classifier('debug')
            file('nexus-artifact-uploader.hpi')
        }
      }
    

    【讨论】:

    • 您应该在每次上传工件时增加版本号。
    • 用 version("2.4.${env.BUILD_NUMBER}") 更新了我的答案,你真的需要自己处理。这是方法之一。而且我们现在离最初的问题还很远。
    • 我想我们已经完成了,原来的问题已经回答了,你只是在找人为你编码。我要举报。
    • 我再次尝试了我的解决方案,但这次遇到了问题。你的是完成新任务的最佳人选。我的解决方案仅适用于我遇到的上一个问题。很抱歉,您没有像以前那样做出最好的回答。我现在修好了:)曾经很抱歉。我不知道。我还编辑了这个问题,以便清楚和其他人。希望现在满足要求。
    • 如果我不这样做是不公平的。 ;)
    【解决方案2】:

    正如@hakamairi 已经说过的,不建议将具有相同版本的工件重新上传到 Nexus 存储库,Maven 是围绕工件的 GAV 始终对应于唯一工件的想法构建的。

    但是,如果要允许重新部署,则需要将发布存储库的部署策略设置为“允许重新部署”,然后才能重新部署相同的版本。如果没有在存储库方面允许,您将无法做到这一点。

    对于部署到 Nexus 存储库,您可以使用 Nexus Platform Plugin 或 Nexus Artifact Uploader。

    【讨论】:

    • 工件的重新部署是一个常见的过程。许多 IT 公司都这样做。虽然我感谢你的回答。几天后我会上传另一个问题,我会提到你,看看我在说什么。谢谢@biruk1230
    • 是的,我知道有些公司会重新部署,但仍然不推荐 :) 正如我所说,尝试在您的 Nexus 存储库服务器配置中启用“允许重新部署”。
    • 你是对的!我在执行代码之前这样做了。我将为将来会看到它的人编辑我的答案。再次感谢@biruk1230
    • 我已经启用的重新部署设置。我只是忘了插入它作为答案@ biruk1230。你记得我。 :)
    【解决方案3】:

    同样有效的附加解决方案

    我手动执行并导出了 Nexus 调用的结果。结果是以下命令。此命令需要作为 Groovy 代码插入到 Jenkins 管道中:

    nexusPublisher nexusInstanceId: 'nexus', nexusRepositoryId: 'maven-play-ground', packages: [[$class: 'MavenPackage', mavenAssetList: [[classifier: '', extension: '', filePath: '**PATH_NAME_OF_THE_ARTIFACT**.jar']], mavenCoordinate: [artifactId: '**YOUR_CUSTOM_ARTIFACT_ID**', groupId: 'maven-play-ground', packaging: 'jar', version: '1.0']]], tagName: '**NAME_OF_THE_FILE_IN_THE_REPOSITORY**'    }
    
    • 在 filePath 字段中,我们需要插入 artifact.jar 文件的路径和名称。
    • 在 artifactId 字段中,我们需要插入自定义(在这种情况下为我的工件)工件 ID
    • 在 tagName 字段中,我们需要从 Nexus 存储库中插入目录的自定义名称

    这是一种无需手动更改和编辑即可自动完成的解决方案。一旦我们在 Nexus 存储库中创建了目录,这将毫无问题地执行,也无需更改版本号。

    注意:我们还需要在 Nexus Repository 设置中启用重新部署功能。

    【讨论】:

    • @hakamairi 您的回答尚未完成,但这是我解决问题的想法的开始。我很感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2012-05-20
    • 2021-12-11
    • 1970-01-01
    • 2017-08-19
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多