gpt4 book ai didi

maven-2 - maven 的 buildNumber 元数据如何在多个构建代理之间变得不一致?

转载 作者:行者123 更新时间:2023-12-02 10:56:09 24 4
gpt4 key购买 nike

我们最近在构建环境中添加了第二台构建机器,并开始遇到非常奇怪的偶尔构建失败。

我有两台独立的 Maven 构建机器,AB,每台都运行 Maven 2.2.1 并与共享的 Nexus 1.5.0 存储库管理器进行通信。我的问题是,在 B 上构建有时会失败,因为它拒绝下载先前由 B 构建的常见依赖项“acme-1.0.0-SNAPSHOT”的更新版本>A 并上传到 Nexus。

查看两台机器上的本地存储库,我注意到存储库元数据中有一些奇怪的地方。

机器A的 acme\1.0.0-SNAPSHOT\maven-metadata-nexus.xml:

<metadata>
<groupId>acme</groupId>
<artifactId>acme</artifactId>
<version>1.0.0-SNAPSHOT</version>
<versioning>
<snapshot>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20100525173546</lastUpdated>
</versioning>
</metadata>

机器B的 acme\1.0.0-SNAPSHOT\maven-metadata-nexus.xml:

<metadata>
<groupId>acme</groupId>
<artifactId>acme</artifactId>
<version>1.0.0-SNAPSHOT</version>
<versioning>
<snapshot>
<buildNumber>2</buildNumber>
</snapshot>
<lastUpdated>20100519232317</lastUpdated>
</versioning>
</metadata>

在 Nexus 的 acme/1.0.0-SNAPSHOT/maven-metadata.xml 中:

<metadata>
<groupId>acme</groupId>
<artifactId>acme</artifactId>
<version>1.0.0-SNAPSHOT</version>
<versioning />
</metadata>

如果我正确解释元数据文件(在线文档很少),则机器 B 似乎认为它具有较新版本的 acme 依赖项(基于buildNumber),尽管机器 A 最后一次构建它是在机器 B 构建之后 6 天(基于时间戳)。 Nexus 似乎也不知道普遍正确的 buildNumber。

怎么可能出现这种情况?我可以采取什么措施来防止我的构建因元数据不一致而失败?你有过类似的经历吗?

重要说明:

  • 两台构建机器都有 settings.xml 文件,其中 updatePolicy 为“always”。
  • Nexus 确实有由 A 构建的更新版本的 acmeB只是拒绝下载它。
  • AB 是唯一上传到 Nexus 的计算机。
  • 两台服务器共享相同的系统时间。
  • 所有涉及的进程都拥有元数据文件的写入权限,以便可以根据需要进行更新。
  • 我无法找到任何描述此行为的公开 Maven 或 Nexus 问题。
  • 我们的 CI 服务器 (Atlassian Bamboo) 可以防止同一工件的构建同时发生,因此上传到 Nexus 时不太可能出现某种竞争情况。

最佳答案

看起来您从 Nexus 发布了错误的 maven-metadata,这看起来像是 acme 文件夹中的元数据,而不是 acme/1.0-SNAPSHOT 文件夹中的元数据。 (其中会有内部版本号和时间戳)。

无论如何,您是否尝试过将 -U 添加到 Maven 构建命令中?您可能偶然发现了一些关于始终设置的 Maven 错误,但我确信 -U 有效。

关于maven-2 - maven 的 buildNumber 元数据如何在多个构建代理之间变得不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com