2012-11-26 38 views
13

我们有许多Java项目,这些项目都是使用Jenkins构建的CI。这些部署到我们自己的Nexus服务器上就好了。 问题是,我们需要将这些库提供给第三方,但没有源代码。 所以对于每一个项目,在的Nexus我们:将Maven工件部署到具有不同设置的多个存储库

  • 发布为我们的开发者资源库(包括部署的源代码)
  • 快照库为我们的开发人员(包括部署的源代码)
  • 第三方版本存储库(仅限JAR + POM)
  • (并且会很好):第三方快照存储库(仅限JAR + POM)第三方每晚构建

现在的问题是:这在Jenkins/Nexus世界中通常如何处理?我更愿意在Jenkins中有一个单独的Job,它可以“自动”处理CI构建和发布(artefact deployment)过程。 目前我使用多个<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的“目标和选项”创建一个工作:clean deploy -P third-party,然后用“默认”数据添加后构建操作 - “将工件部署到Maven存储库” - 但在这种情况下,只有SNAPSHOT将通过Jenkins Maven Release Plug-in发布的回购和文物只进入一个存储库。

任何实际的想法我怎么能做到这一点,而不会过度复杂我们的CI作业层次?

在此先感谢!

+0

可能重复http://stackoverflow.com/questions/635154/multiple-deployments- in-maven) –

+0

是的,我查了一下。实际上,下面推荐的Wagon插件可能与'merge-maven-repos'具有相同的功能,这可能适用于其他文章。所以最坏的情况下,我们需要实现一个自定义插件,我只是想知道是否有一个“常用的方法”即使在Jenkins的帮助下也能做到。 – Siaynoq

回答

3

你可以在Nexus中处理这一切。创建一个存储库目标,其中包含一个像预配置示例“除源(Maven 2)之外的所有内容”中使用的模式,并使用另一种限制组ID,artifactid甚至版本的模式进一步缩小目标。

然后创建一个权限,使用该存储库目标并将其分配给要分别访问的用户或角色。

不需要做多个部署或一些这样的..

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

[Maven中的多个部署(的
+0

谢谢!在了解repo-target/privilege/role/user层次结构之后,设置Nexus限制特定用户访问源jar包是一个小菜。我对“查看”( - >能够查看目录)和“读取”( - >能够下载文件)的区别存在一些混淆,但否则它很容易。 – Siaynoq

+0

链接已损坏。 – Cleankod

+0

修复了@CleanKod的链接 –

0

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

+0

感谢您的想法。这确实看起来很有用,但我找不到任何工作示例,它们基本上将一部分文件(在本例中为main jar和pom.xml)“复制”(或上载)到另一个repo(以及层次结构中的相同位置)。任何提示? – Siaynoq

相关问题