你的远程仓库总是拉不到包,一个小妙招教你解决

Tommy744
• 阅读 1096

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作为远端仓库代理时常见的几个场景。

本文转自 https://www.kubernetes.org.cn/9108.html,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这