高级存储库-获得更多的开箱即用!
代理远程存储库并从中缓存外部构件的能力至关重要,无论这些构件是Docker映像、NuGet包、npm、tar.gz文件还是我们用来创建自己产品的任何依赖文件。hth华体会最新官方网站它加快了我们的构建速度,确保了可靠的访问,提供了对材料清单的控制,并提供了更多的好处,使其成为当今CI / CD领域中不可或缺的实践。
当使用Artifactory时,我们通常会有一个远程仓库指向JCenter,其他的指向其他相关的公共仓库,比如Docker Hub、NuGet Gallery、npm registry、PyPI等等。通过配置虚拟存储库的能力,我们为构建工具、用户和不同的客户端提供了一个端点来解析所有需要的工件,首先查看本地和缓存项,然后进行远程搜索。
当我们的依赖项都是特定的发布版本时,这非常有效。当您有地理上分散的团队在同一个项目上工作时,或者当您有不同的相互依赖的项目,这些项目经常被修改并且需要与彼此的快照版本保持最新时,事情会变得更加复杂。
复制是答案,是吗?
一种解决方案是使用Artifactory复制存储库的能力(拉遥控器,推和multi-push对于本地),如果您需要保持完全同步,这是完美的。同步可以在cron表达式上计时,也可以由事件触发。这将负责主动下载新工件,删除已远程删除的工件,并确保属性始终保持同步。
复制的问题在于,当存储库中有许多工件时,它会占用大量的负载和带宽。如果您可以只获得团队同步所需的工件,并避免不必要的负载和网络流量,那不是很好吗?你猜怎么着。你可以。让我向您介绍Artifactory的最新功能之一……
智能远程存储库
在Artifactory中,远程存储库由远程资源的URL表示,您可以从中下载和缓存工件。但是,如果该URL恰好指向Artifactory的另一个实例中的存储库,该怎么办?这种亲缘关系值得利用。如果我的Artifactory正在代理另一个Artifactory中的存储库,那么这些表兄弟实例没有理由不能相互通信并做一些聪明的事情。
- 自动检测
因此,第一件事是Artifactory识别它自己的类型,如果您的远程存储库的URL指向Artifactory的另一个实例,您将看到一个对话框,在这个对话框中您可以配置这两个实例将如何交互。
- 报告统计
另一方面的挑战之一是如何能够知道哪些项正在其他存储库上被使用。目前,我们能够知道一个工件被下载的时间、最后一次下载的时间以及最后被谁下载的时间。我们经常在清理脚本中使用这些信息,以确保我们不会远程化一个会破坏某些构建的项目。这里的问题是,一旦项被缓存,计数器就会增加1,并且随后的任何下载请求都将直接从缓存发送到服务器,因此无法知道该项是否实际上仍在使用。当检查此选项时,远程缓存上的每个下载请求也将更新一个名为remote Downloads的新字段,以跟踪从代理我们的repo的其他缓存存储库进行的远程下载的数量。这个字段可以在我们的干净脚本中使用,以确保我们可以安全地回到周一的工作中,而不必担心在启动前会有一个非常糟糕的承诺等待我们。 - 同步性能
通常,一旦您从远程存储库缓存了工件,您将不知道在远程资源上注释工件的任何属性是否被更改了。但是有了智能远程存储库,你就可以了。如果您在远程存储库配置中选中此框,那么每当有获取工件属性的请求时,Artifactory将根据远程实例中原始工件上的相应属性验证它们的值。对远程项目属性的任何更改(更新、添加、删除)将自动同步到本地缓存副本,而无需再次下载工件。因此,举例来说,如果您下载了一个状态为“Release Candidate”的工件,并且远程团队稍后将其状态更改为“Integration Test Failed”,那么下次您检查是否可以使用该工件时,本地缓存副本上的状态将自动更新。现在,您不想发布一个集成测试失败的工件,是吗? - 远程列表浏览,你从来没有想过可能
Artifactory中支持的许多包类型由于各种原因不提供列表浏览,然而,由于智能远程存储库保留了一些东西,Artifactory知道如何克服这一限制,并允许您在您一直想要但不能的地方进行远程浏览,例如Docker, NuGet, npm, Bower, PyPI等等. - 删除提示
如果一个项目你缓存已被删除从远程存储库你将能够看到这个指示Artifactory和知道你正在使用一个工件,不再可用,这可能是非常有用的,如果因为某些原因你根据这个工件所以你可能想要把它移动到一个本地存储库,所以下次你会清理你的缓存你将不再能够从远程存储库下载一遍。
这仅仅是个开始。随着智能远程存储库变得越来越智能,您可以期待诸如下载统计数据同步、链接多个Artifactory实例时的传递性同步、在远程存储库上执行AQL搜索、远程推送工件等功能。
(2015年10月更新)
