高级存储库-获得更多的开箱即用!

代理远程存储库和缓存外部工件的能力是至关重要的,无论它们是Docker映像、NuGet包、npm、tar.gz文件还是任何我们用来创建自己产品的依赖项。hth华体会最新官方网站它加速了我们的构建,确保了可靠的访问,提供了对材料清单的控制,并提供了更多的好处,使其成为当今CI / CD领域中不可缺少的实践。

在使用Artifactory时,我们通常会有一个远程repo指向JCenter,其他的则指向其他相关的公共存储库,如Docker Hub、NuGet Gallery、npm registry、PyPI等等。通过配置虚拟存储库的能力,我们为我们的构建工具、用户和不同的客户端提供了一个解决所有所需工件的单一端点,首先查看本地和缓存项,然后远程搜索。

当我们的依赖项都是特定的发布版本时,这种方法非常有效。当您有地理上分布的团队在同一个项目上工作时,或者当您有不同的相互依赖的项目时,情况会变得更加复杂,这些项目需要不断修改,并且需要使用彼此的快照版本保持最新。

复制是答案,真的吗?

一种解决方案是使用Artifactory复制存储库的能力(拉动遥控器而且multi-push对于本地),如果你需要保持完全同步,这是完美的。同步可以在cron表达式上计时,也可以由事件触发。这将负责主动下载新的工件,删除远程删除的工件,并确保属性始终保持同步。

复制的问题在于,当存储库装载了许多工件时,它可能会占用大量的负载和带宽。如果您可以只获得团队同步所需的工件,并避免不必要的负载和网络流量,这不是很棒吗?你猜怎么着。你可以。让我向您介绍Artifactory的最新功能之一……

智能远程存储库

在Artifactory中,远程存储库由您从中下载和缓存工件的远程资源的URL表示。但是,如果该URL恰好指向Artifactory的另一个实例中的存储库呢?这种亲缘关系需要加以利用。如果我的Artifactory正在代理另一个Artifactory中的存储库,那么这些表实例就没有理由不相互通信并做一些聪明的事情。

  1. 自动检测
    因此,第一件事是Artifactory可以识别它自己的类型,如果您的远程存储库的URL指向Artifactory的另一个实例,那么您将看到一个对话框,您可以在该对话框上配置这两个实例如何交互。
    智能远程截图
  2. 报告统计
    另一方面的挑战之一是如何能够知道其他存储库正在使用哪些项。目前,我们能够知道工件被下载的时间,最后的下载时间以及最后一次被谁下载。我们经常在清理脚本中使用这些信息,以确保我们不会远程删除会破坏某人构建的项目。这里的问题是,一旦某项被缓存,计数器就会增加1,随后的任何下载请求都将直接从缓存中发送,因此不可能知道该项是否仍在使用。当检查此选项时,远程缓存上的每个下载请求也将更新一个名为remote Downloads的新字段,跟踪从其他缓存库代理我们的repo进行的远程下载的数量。这个字段可以在我们的干净脚本中使用,以确保我们可以在周一安全地回到工作中,而不必担心在发布之前会有一个通知告诉我们会发生非常糟糕的事情。
  3. 同步性能
    通常,一旦您缓存了来自远程存储库的工件,您将不会知道在远程资源上注释工件的任何属性是否被更改。但是使用智能远程存储库就可以了。如果您在远程存储库配置中选中此框,那么每当有获取工件属性的请求时,Artifactory将根据远程实例中原始工件上的相应属性验证它们的值。对远程项目属性的任何更改(更新、添加、删除)都将自动同步到本地缓存的副本,而无需再次下载工件。因此,例如,如果您下载了一个状态为“Release Candidate”的工件,并且构建它的远程团队稍后将其状态更改为“Integration Test Failed”,那么您的本地缓存副本上的状态将在下次您检查是否可以使用该工件时自动更新。您不希望发布一个集成测试失败的工件,对吗?
  4. 远程列表浏览,你从来没有想过可能
    Artifactory中支持的许多包类型由于各种原因不提供列表浏览,但是,由于智能远程存储库将内容保存在家族中,Artifactory知道如何克服这一限制,并允许您在一直想要但不能进行远程浏览的地方进行远程浏览,例如Docker, NuGet, npm, Bower, PyPI等等
  5. 删除提示
    如果一个项目你缓存已被删除从远程存储库你将能够看到这个指示Artifactory和知道你正在使用一个工件,不再可用,这可能是非常有用的,如果因为某些原因你根据这个工件所以你可能想要把它移动到一个本地存储库,所以下次你会清理你的缓存你将不再能够从远程存储库下载一遍。

这仅仅是个开始。您可以期待诸如下载统计数据同步、链接多个Artifactory实例时的传递性同步、在远程存储库上执行AQL搜索、远程推送工件等功能,因为智能远程存储库正变得越来越智能。

(2015年10月更新)