将 Maven 工件部署到具有不同设置的多个存储库

2022-09-02 22:36:47

我们有许多 Java 项目,这些项目是用 Jenkins 构建的 CI。这些都部署到我们自己的Nexus服务器上就好了。问题是,我们需要将这些库提供给第三方,但没有源代码。因此,对于每个项目,在Nexus中,我们都有:

  • 为我们的开发人员发布存储库(包括已部署的源代码)
  • 面向开发人员的快照存储库(包括已部署的源代码)
  • 第三方发布存储库(仅限 JAR + POM)
  • (最好有):第三方快照存储库(仅限JAR + POM),用于第三方夜间构建

问题是:在 Jenkins/Nexus 世界中,这通常是如何处理的?我更喜欢在 Jenkins 中有一个单独的作业,它“自动”处理 CI 构建和发布(人工制品部署)过程。目前,我正在我们的“主根pom.xml”中使用多个配置文件(所有项目都包含):<distributionManagement>

[...]
<profiles>
    <profile>
        <id>default</id>
        <distributionManagement>
            <repository>
                <id>releases</id>
                <name>Release</name>
                <url>http://path/to/nexus/content/repositories/releases/</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshot</name>
                <url>http://path/to/nexus/content/repositories/snapshots/</url>
                <uniqueVersion>false</uniqueVersion>
            </snapshotRepository>
        </distributionManagement>
    </profile>
    <profile>
        <id>third-party</id>
        <distributionManagement>
            <repository>
                <id>releases</id>
                <name>Release</name>
                <url>http://path/to/nexus/content/repositories/third-party/</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshot</name>
                <url>http://path/to/nexus/content/repositories/third-party-snapshots/</url>
                <uniqueVersion>false</uniqueVersion>
            </snapshotRepository>
        </distributionManagement>
    </profile>
</profiles>

从 Maven 文档中可以看出,似乎无法在同一构建生命周期中使用多个存储库,更不用说我们需要/不需要基于目标存储库的源代码。

我可以在 Jenkins 中创建作业,使用 Maven 的“目标和选项”:然后添加构建后操作 - “将工件部署到 Maven 存储库”与“默认”数据 - 但在这种情况下,只有 SNAPSHOT 会同时进入存储库,而通过 Jenkins Maven Release 插件发布的工件只能进入一个存储库。clean deploy -P third-party

任何实际的想法,如何在不过度复杂化我们的CI工作层次结构的情况下做到这一点?

提前致谢!


答案 1

您可以在Nexus中处理所有这些。创建一个存储库目标,其中包含一个类似于预配置示例“除源之外的所有(Maven 2)”中使用的模式,并使用另一个限制分组,伪影甚至版本的模式进一步缩小该目标的范围。

然后创建使用该存储库目标的权限,并将其分配给您希望具有相应访问权限的用户或角色。

无需执行多个部署或类似操作。

查看 http://books.sonatype.com/nexus-book/reference/repository-targets.html


答案 2

您可以使用Maven Wagon插件,并在部署阶段将单个jar上传到远程位置。


推荐