Hudson提供了让Maven构建作业使用私有本地存储库的选项,或者使用Maven安装中的公共存储库,即与其他构建作业共享的库。我感觉我们的构建应该使用私有本地存储库来确保它们是干净的构建。但是,这会导致性能问题,特别是在为每个作业下载所有依赖项的带宽方面 - 我们还将作业配置为以干净的工作空间开始",这似乎会破坏私有的maven repo与其余的构建空间。
对于每日持续集成构建,选择是否为每个构建作业使用私有本地maven存储库的优缺点是什么?与其他工作分享当地的回购是一件大事吗?
答案 0 :(得分:1)
解释jenkins文档,如果
,则使用private Maven repository
- 您最终导致构建错误成功,只是因为您拥有本地存储库中的所有依赖项,尽管事实如此 POM中没有任何存储库可能拥有它们。
- 您遇到有关并发Maven进程尝试使用相同本地存储库的问题。
此外
使用此选项时,请考虑设置Maven工件管理器 这样您就不必经常点击远程Maven存储库。
此外,您可以探索scm's clean option(而不是工作区清理)以避免此存储库被破坏。
答案 1 :(得分:0)
我相信Sonatype建议使用本地Nexus实例,即使他们自己的研究显示(2015年软件供应链状况报告),Maven Central的流量不到5%来自此类存储库。
回到这个问题,假设您的构建服务器(例如Jenkins)和Nexus之间有本地Nexus实例和高带宽连接(至少几十Gbps),那么我可以看到使用私有本地的一些缺点回购,事实上,我认为建筑性能的下降是合理的权衡。
上面说过,我们究竟在做什么交易?我们正在接受一个小的性能损失,我们知道100%确定与我们的本地Nexus实例作为代理的独立,干净的构建工作。
后者很重要,因为考虑构建服务器上的本地存储(可能在jenkins的用户主目录中)有一个未在Nexus中缓存的人工制品的情况(如果你开始对抗你的构建,这不是不可能的Maven Central)。这种不同步的方案不是最理想的,因为如果Nexus的中心上游连接暂时中断,Nexus中的缓存TTL设置可能会导致构建失败。
最后,为了在权衡方面增加更多权益,我今天花了好几个小时在共享的Jenkins用户.m2 /存储库中获取一个人工制品。当天早些时候,上游与中环的连接在当地上下几个小时(企业环境中的神秘问题)。最后,我删除了整个共享的jenkins用户.m2 / repository,以便从本地Nexus中检索所有内容。
值得考虑使用本地.m2 / repository(在jenkins用户主目录中)进行构建,以及使用私有本地存储库构建(快速且速度较慢的构建)。然而,在我的情况下,我可能只在第一个实例中选择私有本地存储库 - 如果我通过专注于低挂果(例如拆分多模块构建)来优化构建,我可能会接受惩罚。