调试校验和不匹配错误
本文将介绍几种在收到客户端校验和不匹配错误时进一步调试的方法。这不会涵盖所有原因,因为不同的客户端处理校验和的方式不同,但将重点关注接收此错误时的一般调试过程。
首先,校验和不匹配错误意味着客户端收到了带有意外校验和的工件。这应该总是在客户端中输出预期的校验和和实际的校验和。
调试步骤
大多数(如果不是全部)出现此错误都会涉及远程存储库。首先,我们要在Artifactory中对错误中的实际和预期校验和输出执行校验和搜索。我们将想看看在Artifactory实例中的多个存储库中是否引用了“相同的”工件。
要检查的初始配置是围绕在多个具有不同校验和的存储库中包含工件的任何虚拟存储库。我们可以查看虚拟存储库的解析顺序,以便更好地理解返回二进制文件的原因
需要考虑的不同场景
我们将提供一些具体的示例,概述导致此错误的最常见原因:
解决方案/解决方案:在不更新版本的情况下更改二进制文件被认为是糟糕的做法。根据要返回的二进制文件,可以清除缓存并为虚拟包生成更新的元数据,也可以重命名本地包以增加/更新版本。
解决方案/解决方案:在这种情况下,我们需要删除缓存的二进制文件,以便Artifactory返回到远程注册表以获取更新的包。
https://anaconda.org/anaconda/_libgcc_mutex/files
https://anaconda.org/conda-forge/_libgcc_mutex/files
在这里,我们看到linux-64/_libgcc_mutex-0.1-main.tar。Bz2是“相同的”二进制文件,但校验和不同。这可能会在Artifactory中引起问题,具体取决于解析顺序和缓存。虚拟存储库将首先查看本地存储库,然后查看远程缓存存储库,最后通过远程存储库访问远程端点。如果我们期望的包没有缓存,而另一个二进制文件已经缓存在另一个存储库中,我们可以看到校验和不匹配。
解决方案/解决方案:为特定的远程存储库设置“优先级分辨率”将解决此问题。“优先级解析”意味着它将在查看其他存储库的缓存之前搜索此存储库的远程端点。这可以在远程存储库配置的Advanced选项卡中设置。
还有许多其他原因,其中一些特定于包类型,如果我们遇到与上述示例不一致的校验和不匹配错误,请与JFrog支持团队一起打开一个案例,以进一步挖掘其他可能的原因。