【发布时间】:2017-07-25 20:10:56
【问题描述】:
我们的构建服务器的本地存储库包含工件的 SNAPSHOT 版本的不一致数据。即使为mvn 设置了-u,这也会导致构建服务器加载较旧的时间戳版本。
这种行为让我很担心。同事抱怨你“不能信任 Maven 构建”。我需要做点什么。
当然,我可以为每个构建重新加载每个工件(基本上忽略本地存储库),但这会花费不必要的时间。
有没有办法确定本地存储库是否“损坏”?
(请不要建议我们不要在构建服务器上使用 SNAPSHOT - 我们至少需要再这样做一年。)
编辑:
- 我们的构建服务器是 Quickbuild,但它不应该太重要,因为它只是检查代码然后调用 Maven。
- 不一致的原因在于以 -SNAPSHOT 结尾的文件(pom、jar 等)的年龄不同。它应该保留一份副本,但我没有,所以我不能提供更多细节。
- 本地存储库为大约 2000 个独立 Java 项目的所有构建共享。
【问题讨论】:
-
您在谈论“我们构建服务器的本地存储库”,但没有提及您实际使用的构建软件,也没有提及您拥有什么样的不一致数据。将这些添加到问题中。另外,您是否在构建之间共享本地存储库?对于每个构建,还是对于某些构建?
-
这可能是线程安全问题吗?
-
如果您有 2000 个作业使用同一个本地存储库,我认为您有一部分不同步并不奇怪,因为您将同时运行作业。理想情况下,您应该只为 已发布 工件和存储库管理器中的快照依赖项共享本地存储库 - 永远不要在构建服务器存储库中本地共享。
-
是的,我认为这只是要求并发问题。
-
抱歉,构建服务器的 500GiB 确实有点小......(目前我们有 2 TiB 用于减少约 500 个工作)......从我的角度来看,讨论很容易:安全第一..这意味着让每个作业都有自己的缓存使其更加可靠。最好有多个模块构建...您可以提供本地存储库的位置
-Dmaven.local.repo=XXXX...仅通过存储库管理器交换工件(单个 SNAPSHOT 存储库足以基于 GAV 进行分离)...和迁移到真正的基于 Maven 的结构等将促进您的构建......等等。