一尘不染

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

jenkins

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

  • __为我们的开发人员 发布 存储库(包括已部署的源代码)
  • __我们开发人员的 快照 存储库(包括已部署的源代码)
  • 第三方发布 存储库(仅JAR + POM)
  • (并且很高兴拥有):第三方每晚构建的 第三方快照 存储库(仅JAR + POM)

问题是:在Jenkins /
Nexus世界中通常如何处理?我希望在Jenkins中有一个Job,可以“自动”处理CI的构建和发布(人工部署)过程。目前,我<distributionManagement>在“主根pom.xml”中使用了多个配置文件(所有项目都包含):

[...]
<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“目标和选项”创建Job,clean deploy -P third- party然后添加带有“默认”数据的Post-build操作-“将工件部署到Maven存储库”,但在这种情况下,快照将用于回购,而通过Jenkins
Maven Release Plug-
in
发布的人工制品仅进入一个存储库。

有什么可行的想法,如何在不使CI工作层次结构复杂化的情况下做到这一点?

提前致谢!


阅读 175

收藏
2020-07-25

共1个答案

一尘不染

您只需在Nexus中处理所有操作即可。创建一个存储库目标,其中包含与预配置示例“除了源中的所有其他内容(Maven
2)”中使用的模式相似的模式,并使用另一种限制groupid,artifactid甚至版本的模式来进一步缩小目标范围。

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

无需进行多个部署或类似的部署。

参见http://books.sonatype.com/nexus-book/reference/repository-
targets.html

2020-07-25