【问题标题】:"Broken" Local Repository - how can I notice? How can I stop it from happening?“损坏的”本地存储库 - 我怎么能注意到?我怎样才能阻止它发生?
【发布时间】: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 的结构等将促进您的构建......等等。

标签: java maven


【解决方案1】:

作为 cmets 讨论的总结:您似乎有 2000 个单独的构建从同一个本地 maven 存储库读取并安装到同一个本地 maven 存储库,即构建服务器中的一个目录。这只是要求并发问题,因为本地 maven 存储库只是一个目录结构,缺乏任何机制来处理对目录结构的并发更新。

通常所做的是您已经构建了特定于作业的本地存储库和一个单独的存储库管理器来处理共享数据。所有创建的工件都将上传到存储库管理器,该管理器也处理并发请求。如果我是你,这就是我的目标。

如果您坚持对工件进行本地文件级共享,那么这些工件至少应该是从 repo 管理器获取的工件,而不是本地生成的快照工件,因为这会导致并发问题。

【讨论】:

  • 有什么短期建议吗?获得额外的磁盘空间(如@khmarbaise 建议的那样,大约为 5 TiB)可能至少需要半年时间。我们有一个 Nexus 来处理我们所有的工件。也许我应该为每个构建使用一个新的本地存储库,从 Nexus 填充它并在构建后直接删除它......
  • @JFMeier 是的,我会从这个开始。如果您没有用于所有作业的磁盘空间,您还可以有选择地在 一些 作业的同一作业的构建之间重用构建作业特定的存储库。
  • 我没有说 5 TiB 但我至少会去 1 或 2 TiB...我不明白的是为什么你有这么多工作?多模块的每个模块是否构建一个单独的工作?迁移到解决模块相互依赖性的多模块构建中会不会更容易?将 SNAPSHOT 部署到存储库管理器中?我们做了同样的事情(将 21 个组件迁移到单个多模块构建中)...解决了其他所有问题并提升了其他事情...
  • 每个“模块”都是一个单独的工作,我们将来应该进行多模块项目。但我们仍在从 Ant 迁移到 Maven 的过程中(目前,我们有 800 个 Maven 和 1200 个 Ant 项目),可能要到 2018 年年中才能开始引入多模块构建。 SNAPSHOT 已经部署到管理我们所有工件(Ant 和 Maven)的 Nexus,因此在本地存储库中安装它们是多余的。
  • 有时很难向外人解释我们有 100 多名开发人员拥有如此多(通常非常小)的独立工件,而且一般项目结构的每一次更改都必须做好充分准备.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2012-08-24
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
相关资源
最近更新 更多