问题描述
2020.11.4
即使经过curl -H -u$ARTIFACTORY_USER:$ARTIFACTORY_TOKEN -XPUT "http://artifactory-url/artifactory/debian/pool/$package;deb.distribution=trusty;deb.component=main;deb.architecture=all" -T $package
10分钟后,我也无法下载文件。变得“无法找到包裹”。
但是当我通过UI上传文件时,一分钟后它变得可用。 另外,当我单击“重新编制索引”后,一分钟后它就会可用。
我正在我们的CI管道中执行此操作,将其上传到工件后,我需要一分钟内可用工件以进行下一步。在这种情况下我该怎么办?为什么通过curl上传而没有索引包?
解决方法
要使apt-get可以下载Debian软件包,必须更新存储库索引。
将Debian软件包部署到本地存储库中时,会将对该存储库的相关子路径建立索引的事件添加到队列中。
专用Debian元数据工作人员一直在处理队列(默认情况下为8,可配置)。
这意味着,一旦Debian软件包被上传,如果队列为空并且有工作线程可用,它将开始处理事件并为元数据建立索引。
通过为包括存储库(debian-local/dists/xenial
)在内的整个分发路径创建锁来进行索引。一旦工作线程开始为存储库和分发的特定组合编制索引,则在存在锁的情况下,另一个工作人员将不会开始为同一路径的另一个事件建立索引。
完成索引需要10分钟(大约需要1m)。在加载的系统中或将许多Debian软件包部署到同一分发路径时,可能会发生这种情况。
您可以在artifactory.system.properties
中使用以下系统属性来调整工作人员的数量:
artifactory.debian.metadata.calculation.workers = 8
您还可以通过调用Calculate Debian Repository Metadata REST API方法来为整个存储库强制进行元数据的同步计算。
有关Artifactory Debian索引计算调整和调试的更多信息,请查阅以下knowledge base article。