【问题标题】:What is the best practice for archiving Jenkins pipeline artifacts归档 Jenkins 管道工件的最佳实践是什么
【发布时间】:2019-04-20 03:23:14
【问题描述】:

我看到您可以向 maven Pom 添加目标,以将工件存档到 repo 管理器,例如 nexus

https://www.baeldung.com/maven-deploy-nexus

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

但 Jenkins 也允许您从管道本身执行此操作

https://wiki.jenkins.io/plugins/servlet/mobile?contentId=96076078#content/view/96076078

freeStyleJob('NexusArtifactUploaderJob') {
    steps {
      nexusArtifactUploader {
        nexusVersion('nexus2')
        protocol('http')
        nexusUrl('localhost:8080/nexus')
        groupId('sp.sd')
        version('2.4')
        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')
        }
      }
    }
}

这两种方法有什么区别,是更常用的一种吗?

【问题讨论】:

    标签: maven jenkins pom.xml nexus artifacts


    【解决方案1】:

    主要区别在于,如果您使用 maven,则可以使用 mvn deploy 从本地计算机手动将工件添加到 Nexus。因此,这实际上归结为您希望如何创建最终用于生产的工件。以我的经验,这样做的首选方法是使用 Jenkins。使用 Jenkins 的优点是您可以将新版本构建链接到其他活动,以及在满足某些条件时触发发布的可能性,而不是手动启动构建。此外,您最终会在同一平台上构建所有版本,并且如果每个开发人员都从他们自己的计算机构建此类版本,则可以避免计算机之间的差异。

    但您可能仍需要 maven 配置。 Jenkins 可能会使用此信息来查找将工件上传到的 URL(您的示例没有说明 Jenkins 如何找到 Nexus),有时上传 SNAPSHOT 版本或其他一些不适合生产的临时版本很有用。在您的示例中,您只为上传 SNAPSHOT 版本定义了 Nexus,我想这样做是为了强制执行禁止从本地计算机上传最终版本的规则。

    顺便说一句,在您的pom.xml 中定义一个存储库并不意味着会自动上传任何内容。只有当您使用在 pom 中定义的存储库执行 mvn deploy 时,才会上传某些内容。

    【讨论】:

    • 我会尽量澄清我的问题。我想了解的是“部署”是否更适合成为 pom 或 jenkinsfile 本身的一部分。假设有一个名为 my-app 的存储库,并且在其中您具有使用 maven 创建的 java 应用程序的通常结构。如果 jenkinsfile 和 pom.xml 都存在于 repo 中,那么 CI/CD 的更好做法是什么?通过在 POM 中设置“部署”目标(+repo url)来发布工件?或者通过设置“包”目标并使用jenkins插件将其推送到nexus?这只是个人喜好还是有最佳做法。
    • 我想说这主要取决于个人喜好。与我所知的唯一实际区别是在不使用 Jenkins 的情况下将工件添加到 Nexus 是多么简单。有些人可能希望能够这样做,有些人可能希望阻止人们这样做。
    • 更简单的解决方案是依赖 pom.xml,因为 maven 会为您处理上传。它还允许你使用 maven 发布插件(它不是那么好,所以如果你不能这样做也不会造成很大的损失。)我不确定在不使用 maven 的情况下从 Jenkins 上传到 Nexus 是多么容易
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2021-07-26
    相关资源
    最近更新 更多