如何在Jenkins中分离对Maven存储库的写入权限?

时间:2015-08-10 12:19:13

标签: maven jenkins

为了防止一个构建影响另一个构建,可以将Jenkins项目配置为使用自己的私有Maven存储库。但是,因为我们实际上有一个巨大的依赖项列表,这会导致大量浪费的磁盘空间并减慢构建速度。我们使用Maven存储库代理,但仍然需要通过本地网络下载工件的时间很长。

我可以直接在Jenkins机器上设置另一个存储库代理。有更简单的解决方案吗?

我仍然希望任何" maven安装"转到特定于项目的仓库,而未部署到该项目特定仓库的工件的读取应来自本地文件系统的中心位置。出于性能和磁盘空间的原因,应该复制这些工件。

为了解释背景,我附加了"使用私有Maven存储库"的帮助文本。选项:

  

"通常,Jenkins使用本地Maven存储库来确定   Maven - 确切的过程似乎没有记录,但它是   〜/ .m2 / repository并且可以被in覆盖   〜/ .m2 / settings.xml(有关更多详细信息,请参阅参考资料。)

     

这通常意味着所有在同一个上执行的作业   节点共享一个Maven存储库。这个好处就是你   可以节省磁盘空间,但有时候的缺点是   这些构建可能会相互干扰。例如,你可能   最终导致构建错误成功,只因为你拥有所有   尽管事实上没有,但本地存储库中的依赖项   POM中的存储库可能有它们。

     

还有一些关于并发的问题   Maven进程试图使用相同的本地存储库。

     

选中此选项后,Jenkins会告诉Maven使用   $ WORKSPACE / .repository作为本地Maven存储库。这意味着每个   job将为自己获得自己独立的Maven存储库。它   以额外的磁盘空间为代价修复了上述问题   消耗。

     

使用此选项时,请考虑设置Maven工件管理器   因此,您不必经常点击远程Maven存储库。

     

如果您希望在执行的所有Maven作业中激活此模式   在Jenkins上,请参考here描述的技术。"

1 个答案:

答案 0 :(得分:1)

你可以:

  • 一个指向公共本地存储库的settings.xml,用于每个mvn clean package命令
  • 和每个projet的一个settings.xml,它为每个mvn安装命令使用特定的本地存储库

按顺序:

mvn clean package -s settings-common.xml # using common-repo
mvn install -s settings-jobX.xml # using jobX-repo

唯一的问题是,如果需要,您的作业安装的工件将无法用于其他作业。您必须部署或手动将工件复制到common-repo。

请注意,我并不完全理解“一个构建影响另一个构建”的含义。你应该澄清一下,为了得到一个更好的答案(因为你想做的事情可能不是最好的做法)。