用于容器化 CI 的 Maven 多个本地存储库

Maven multiple local repositories for containerized CI

提问人:shay__ 提问时间:11/13/2023 最后编辑:shay__ 更新时间:11/13/2023 访问量:30

问:

我们的 Java 应用程序有许多依赖项,在 CI 期间,大量时间花在下载工件上。由于几乎所有应用程序(Hadoop、Scala、Jackson 等,各种版本)都使用了许多依赖项,因此它们会在每个应用程序 CI 上一次又一次地下载。由于显而易见的原因,CI 过程被容器化,完成后,整个 .m2 文件夹将与容器一起处置。

一个想法是有 2 个本地存储库:

  1. 只读存储库,在共享挂载上,包含所有共享依赖项
  2. CI 容器上的可写一次性存储库,用于下载独占项目

但是我找不到任何以这种方式配置 Maven 的方法。可能吗?


编辑:问题是关于本地存储库的,所有工件都下载到其中,用于构建本身。

谢谢。

java 持续集成 maven 存储库

评论

0赞 khmarbaise 11/13/2023
将“.m2”目录设置为非一次性...在您的 CI 中......并重复使用它?您使用哪种 CI 解决方案?
0赞 aled 11/13/2023
使用不是本地文件系统存储库(如 Nexus 或 Artifactory)的 Maven 存储库。
0赞 shay__ 11/13/2023
@khmarbaise,Aled,也许问题不清楚,请看编辑
0赞 khmarbaise 11/14/2023
我就是这个意思......
0赞 khmarbaise 11/14/2023
例如,还可以进行一些缓存,因为其他基于容器的 CI 系统提供......(但这要付出解压缩缓存内容的代价)......

答:

2赞 J Fabian Meier 11/13/2023 #1

关键是:不应在构建后释放本地存储库。

本地存储库应位于装载到容器中的卷中。

评论

0赞 shay__ 11/14/2023
我们有数百个不同的应用程序,具有不同的依赖和版本,您是否建议我们将所有依赖项都保留在磁盘上?此外,据我所知,Maven 在来自不同构建的并发下载方面并不出色(对吗?这不会有问题吗?
0赞 J Fabian Meier 11/14/2023
标准做法是在磁盘上为每个项目保留一个本地存储库。当然,这可能是数百GB,并且可能不得不不时地使用cron作业将其删除。是的,拥有数百个本地存储库,这些存储库在许多内容中重合,这并不是非常有效的。您可以尝试构建类似共享缓存的东西,您可以在容器的开头从中复制内容,但我还没有在实践中看到这一点。
1赞 shay__ 11/14/2023
谢谢,感谢您的帮助。这是有道理的,我很确定它也适合我们的基础设施。请考虑将此详细说明添加到答案中。