5

我经常使用 Jenkins,并且在集群上运行了许多不同的作业。时不时地有一个工作因一些模糊的错误而失败,我已经能够调试这个事实,即工作 A 正在使用工件 X,而工作 B 刚刚下载或构建了它的新版本(使用 maven) .

作业 A 因 java.lang.NoClassDefFoundError 或 ZIP 文件损坏或 Java 正在使用的某些 ZIP 实现的段错误而失败。

因此,显而易见的解决方案是使用私有本地 maven 存储库来完成作业,但这是相当昂贵的磁盘和互联网解决方案。这意味着每个工作的专家都会下载整个互联网。

在某些情况下,从损坏的 JAR 文件中急切加载类文件通常可以帮助我们限制损坏,但不想对所有内容都这样做。

还有其他解决方案吗?存储库的某种改进锁定?

4

1 回答 1

4

是的,看起来 maven 不喜欢并发访问单个本地存储库(最近有一个问题开放,就在 7 年前)。为每项工作创建 repo 可能非常庞大。但是,有一个变量$EXECUTOR_NUMBER,所以也许您可以使用它为每个 Jenkins 执行程序创建 maven 本地 repo。

于 2013-10-07T08:33:43.150 回答