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

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

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