Artifactory作为外网代理仓库时,用户有时候是否会有经常拉不到包最新版本的包?或者拉包失败后一段时间内始终是失败,找不到原因,过了一会自己又恢复了?这篇文档带你详细了解一下代理仓库一些策略配置,让你更好的了解仓库的机制。
- 场景1:拉包失败后一直重复同样的错误
有一种情况是当你去请求一个不再缓存中的包时候,由于当时可能不确定的原因出现了失败的情况,但是当你再次尝试,并且确定服务器已经可以正常下载的这个包时,去远程仓库请求,始终是下载不下来。正当你排查了一段时间,百思不得其解时,抱着死马当活马医的心态尝试下载时,奇迹般的发现居然可以下载了。
这个问题的原因当Artifactory去远端下载包失败后,会缓存这个失败的状态一段时间,避免频繁去外网恶意请求。假设我们网络稳定的情况这个情况是比较少见的,但是由于目前很多公网源都在国外,导致国内用户使用国外源,网络稳定性使用无法保证。这也就是为什么会出现我们前面说的那个问题出现的原因。
不过,这个缓存的状态的时间是可以调整的,具体位置在仓库配置页面的advance→cache→Missed Retrieval Cache Period (Sec),这个参数为缓存失败状态的时间,仓库如果没有做任何配置的话默认是1800秒,也就是半小时。当出现上面情况的问题是,将这个参数调整为0,就可以立刻触发重新去外网下载。
当然常规时间还是建议配置一定的缓存时间,减少去外网的请求频率。一定程度上可以提高仓库的工作效率。
- 场景2:外网有新包,下载时无法获取到
这种情况尤其是在Npm使用时很常见,由于Npm快速迭代的特性,很多开发者不喜欢在自己引用的包上指定版本号,默认使用latest版本。这样在自己本地开发和使用公司内网开发时会发现,使用本地连接外网开发的版本和内网连接制品库获取的版本不一致。假设版本不同版本间没有明显的功能差异还好,但是如果刚好是组件迭代了一个新的功能或者方法,本地开发时候引用到了,这时候会导致整个项目的Bug。
这个问题主要原因是制品库获取远端仓库是有索引的,而这个索引在制品库中也是同样有缓存的,比如当前更新过一次索引,那么仓库一段时间内是不会再次去更新的,这个目的也是为了减少仓库去外网请求的频率。
当然这个与上面的内容一样,也是可以配置的,具体位置在仓库配置页面的advance→cache→Metada Retrieval Cache Period (Sec),就是仓库更新索引缓存的时间,仓库如果没有做任何配置的话默认是7200秒,也就是两个小时。当出现上面情况的问题是,将这个参数调整为0,就可以立刻触发重新去外网更新索引,这样就可以获取到最新版本了。
- 场景3:使用的代理,但是无法获取到包
配置代理后发现无法拉包,但是测试代理下载没有问题。一般情况下来说,这之后需要去确认代理是否支持Head请求,远程仓库代理下载时为了会使用Head去校验包是否存在,但是由于代理不支持Head,导致请求失败,无法触发下载。
当确认下载无问题时,并且公司内代理由于安全管理问题,无法支持Head请求,可以使用参数配置跳过,直接触发包的下载。具体参数如下图。
以上几个问题是使用Artifactory作为远端仓库代理时常见的几个场景。
登录后评论
立即登录 注册