Artifactory企业。一流的工件管理。在全球范围内。在规模

Artifactory企业许可证提供了各种独特的高级功能,为全球企业遇到的实际问题提供了解决方案。我们文档这些功能,并编写博客文章而且白皮书但作为一家社区驱动的公司,没有什么比看到人们实际使用这些功能更能证明他们为组织带来的价值了。下面是其中一位说的:
当团队分布在世界各地时,Artifactory是包管理和二进制工件分发问题的优秀解决方案。的缓存和数据复制特性Artifactory企业版极大地简化了全球软件开发。”
联合创始人兼首席顾问马修·斯凯尔顿
Skelton Thatcher咨询公司
Skelton Thatcher是一家技术咨询公司,专门帮助企业将软件迁移到云端。下面这篇文章,得到了Matthew Skelton的许可,讲述了Artifactory Enterprise如何为他的一个客户解决包管理问题。你也可以直接在网站上阅读原文Skelton Thatcher博客.
注意:不要被英式英语弄糊涂了:artifact = artifact
与遍布全球的团队一起进行包管理和工件分发
本周,我们在现场会见了英国的一个客户,该客户在英国和亚太地区都有软件开发团队。它们的实时环境(包括传统的“内部部署”和AWS)在地理上也分布在两到三个时区。我们讨论了在这些不同的位置保持测试数据、可部署的工件和其他资产同步的挑战,以及跨8小时和10小时时区距离传输文件时巨大的网络延迟问题。谈话转向了使用一流的工件管理解决方案(如Artifactory)的好处。
一流的工件管理,在Artifactory中使用缓存、复制和标记
Artifactory通过几种方式帮助解决了一些与包和二进制工件管理相关的地理挑战,我们将在下面探讨这些方法。这些都有助于全球范围内的软件开发。
公共包的缓存
Artifactory通过代理来自本地包客户端的包请求,调用远程存储库,然后在本地缓存公共包存储库(npm, nuget等),对公共包存储库(npm, nuget等)进行智能(实际上是惰性)缓存。这有几个好处:
- 我们可以在边缘防火墙上阻止对公共包端点的访问,以防止不需要的包被下载和安装。由于所有请求都通过我们自己的包回购,我们有机会阻止对某些包和/或的访问执行安全扫描第一次缓存包时。
- 由于对公共回购的访问被阻止,我们还确保所有软件/固件构建只依赖于我们自己的包回购,而不是公共或第三方的回购,从而使构建更具可复制性。
- 我们现在可以审计所有的包依赖请求。
- 通过在网络中本地缓存公共包,我们可以节省大量的出站带宽;在缓存容器映像时尤其如此。
Artifactory使这种公共包的缓存与它的虚拟存储库的概念。
缓存内部包和容器映像
通过设置某些内部包或容器映像集合的远程缓存,我们可以避免在网络中推送许多GB或TB的数据,而是简单地允许远程位置(例如,生产环境)从中央Artifactory实例中“按需”提取包。实际上,这是一种“惰性缓存”模式,但使用我们自己的内部包回购作为上游存储库。
包和二进制文件的复制
对于全球分布的团队,将包和二进制工件(测试数据、容器映像等)放置在每个团队附近是很重要的,这样下载时间就会很快。如果下载一个依赖包需要30分钟,那么您就无法拥有有效的持续集成和部署管道。Artifactory Enterprise通过其智能二进制复制选项帮助解决这一挑战。
从本质上讲,您在靠近一组工程团队的位置设置了一个Artifactory实例,并在靠近另一组位于不同地理位置的团队的位置设置了另一个实例。然后,您可以在Artifactory Enterprise中配置复制设置,以便在位置之间无缝地自动复制包和二进制文件,使其感觉就像包和二进制文件有一个单一的、快速的中心位置。
复制也是用于实现的机制双活高可用性在一个给定的地点。
使用包上的元数据来限制或促进包的使用
持续交付的关键原则之一是一次构建你的二进制文件;这意味着一旦我们在我们的人工回购中有一个二进制文件,如果足够的测试通过,它就有可能被用于生产/现场。也就是说,我们做到了不构建独立的“开发”和“发布”版本的二进制文件,但在发布之前只测试一个二进制文件。Artifactory如何帮助解决这个问题?
我们可以用Artifactory“属性”(元数据)来标记已经通过某些类型测试的包和二进制文件(例如UnitTest,UAT等等),然后让依赖构建或依赖部署只寻找带有特定标记的包。这确实有助于团队选择他们对“最新前沿”版本的接触程度,而不是更经过测试的版本。
对包进行License审计和安全扫描
对于大型组织来说,Artifactory的一个非常好的特性是能够管理和审计包使用的许可证(授权控制).从合规性的角度来看,这极大地简化了确保使用正确类型的许可证以及组织遵守许可证的艰巨任务。

背景-规模化的人工工厂
早在2011-2014年,我是英国一家在线零售商的一个小团队的一员,负责构建和部署。我们已经介绍了用于。net包管理的NuGet和用于管理RedHat Linux服务器的rpm(实际上是Oracle Linux,但不要问…)首先,我们使用了各种NuGet包托管解决方案结果证明,这是相当不成熟的,造成了几乎日常的操作问题。我们还必须处理每天在伦敦办公室和班加罗尔办公室之间往返的大量二进制文件(每天大约6gb,我想——糟糕的MPLS链路被破坏了)。这为两个地点的大约250名开发人员的工作提供了支持。
开发人员是产品的倡导者
最终,我们评估并推出Artifactory企业用于NuGet包和rpm,因为它支持不同的包端点和本机复制功能。我们从未回头。2012年,NuGet支持在Artifactory中还很新鲜;事实上,我们是第一批使用Artifactory Enterprise托管NuGet包集合的客户之一,我们与Artifactory的工程师密切合作,诊断并修复了JFrog实现(相当奇怪的)关于结果分页的NuGet提要规范中的一些尴尬错误(提示几个小时的XML检查-恶心)。JFrog的工程师们非常乐于助人,响应迅速,这鼓励我们继续与Artifactory合作。
Artifactory复制拓扑
除了伦敦和班加罗尔办公室,我们还必须将工件运送到主要和次要数据中心,当时位于英国北部(这是在转移到AWS之前)。我们使用Artifactory的复制和缓存特性在四个位置上构建了一个简单可靠的二进制分发机制:
- 伦敦和班加罗尔有来自开发团队的所有包的镜像——这里的包用于早期部署管道测试(单元测试、组件测试、一些集成测试)。
- 我们有单独的Artifactory集合,用于“经过更多测试”并接近生产的包
- 我们有一个Artifactory实例运行在主数据中心附近,并将其设置为指向伦敦办公室的生产就绪包集合的惰性缓存;当部署在生产中运行时,他们从生产附近的Artifactory服务器请求包,然后从伦敦(或班加罗尔)提取包并缓存它们。这使得生产环境中的包数量较小,并有助于审计。
包装清理是必要的
我们对伦敦/班加罗尔主存储库中的包做了一些分析,发现大约70%的包从未被请求过(为此,我们最初使用了Artifactory前面的Nginx实例中的Nginx日志)。这种高使用率的不使用是由于所有CI构建都会推送一个新包,自动递增构建和包号。这意味着清理包很简单:
- 找到30天以上的包裹
- 选择那些有更新包的包
- 选择那些从未被请求过的包
- 删除!
为了避免过多的存储成本,必须定期、合理地清理二进制构件存储库。当然,出于数据保留或其他法律原因,您需要遵守合规规则,但在像我们所遇到的这种情况下,明确不使用的情况下,清除是很简单的。
总结
一流的工件存储库管理器是现代企业软件开发所必需的。由于其智能缓存、智能复制、集成许可证管理和安全扫描,Artifactory Enterprise非常适合于全球分布式软件开发。
