【问题标题】:Deploying Maven artifact to multiple repositories with different settings将 Maven 工件部署到具有不同设置的多个存储库
【发布时间】:2012-11-13 21:22:06
【问题描述】:

我们有许多 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“目标和选项”:clean deploy -P third-party,然后使用“默认”数据添加构建后操作 - “将工件部署到 Maven 存储库” -但在这种情况下,只有 SNAPSHOT 会同时进入 repo,而通过 Jenkins Maven Release Plug-in 发布的人工制品只会进入一个存储库。

有什么实用的想法可以在不使 CI 工作层次结构过于复杂的情况下做到这一点吗?

提前致谢!

【问题讨论】:

  • 是的,我查过了。实际上,下面推荐的 Wagon 插件可能与merge-maven-repos 具有相同的功能,这可能适用于其他帖子。所以最坏的情况是我们需要实现一个自定义插件,我只是想知道即使在 Jenkins 的帮助下是否有一种“通用方式”。

标签: java maven jenkins nexus


【解决方案1】:

您可以在 Nexus 中处理这一切。创建一个存储库目标,其中包含类似于预配置示例“All but sources (Maven 2)”中使用的模式,并使用另一种限制 groupid、artifactid 甚至版本的模式进一步缩小目标范围。

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

无需进行多次部署或类似的部署..

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

【讨论】:

  • 谢谢!在了解了 repo-target/privilege/role/user 层次结构之后,设置 Nexus 以限制特定用户访问源 jar 是小菜一碟。我对“查看”(->能够查看目录)和“读取”(->能够下载文件)的区别有些困惑,但除此之外真的很容易。
  • 链接已损坏。
  • 修复链接@CleanKod
【解决方案2】:

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

【讨论】:

  • 感谢您的想法。这确实看起来很有用,但我找不到任何工作示例基本上“复制”(或上传)文件子集(在本例中为 main jar 和 pom.xml)到另一个 repo(以及层次结构中的同一位置)。有什么提示吗?
猜你喜欢
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2022-07-25
  • 2013-04-26
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多