我们有许多 Java 项目,它们是使用 Jenkins 构建的 CI。这些部署到我们自己的 Nexus 服务器上就好了。 问题是,我们需要将这些库提供给第三方,但没有源代码。 所以对于每个项目,在 Nexus 中我们有:
- 为我们的开发人员发布存储库(包括已部署的源代码)
- 快照 用于我们开发人员的存储库(包括已部署的源代码)
- 第三方发布存储库(仅限 JAR + POM)
- (最好有):第三方快照存储库(仅限 JAR + POM),用于第三方夜间构建
问题是:这在 Jenkins/Nexus 世界中通常是如何处理的?我更喜欢在 Jenkins 中有一个单独的工作来“自动”处理 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 文档来看,似乎无法在同一个构建生命周期中使用多个存储库,更不用说我们需要/不需要基于目标存储库的源这一事实了。
我可以通过 Maven“目标和选项”在 Jenkins 中创建一个 Job:clean deploy -P third-party
然后添加构建后操作 - 使用“默认”数据“将 Artifact 部署到 Maven 存储库” - 但在这种情况下,只有 SNAPSHOT 将同时用于通过 Jenkins Maven Release Plug-in 发布的 repo 和 Artifact 只进入一个存储库。
关于如何在不使我们的 CI 作业层次结构过于复杂的情况下执行此操作的任何实用想法?
提前致谢!
最佳答案
您可以在 Nexus 中处理这一切。创建一个存储库目标,其中包含一个类似于预配置示例“All but sources (Maven 2)”中使用的模式,并使用另一个限制 groupid、artifactid 甚至版本的模式进一步缩小该目标。
然后创建使用该存储库目标的权限,并将其分配给您希望拥有相应访问权限的用户或角色。
不需要进行多次部署或类似的..
参见 http://books.sonatype.com/nexus-book/reference/repository-targets.html
关于java - 将 Maven Artifact 部署到具有不同设置的多个存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564180/