Ruby:使用Ruby开发时使用二进制存储库管理器的10个理由

在过去的几年里,软件开发已经从专注于内部编码发展到广泛使用二进制组件,如免费的开源库和商业库以及内部构建的专有库。早在2010年进行的一项调查中,98%的企业级公司报告说他们使用开源软件1,今天一个典型的软件项目将由更多的组装组件组成,而不是专有代码。使用Ruby开发的公司也不例外。RubyGems.org自2009年成立以来,已经有超过30亿颗宝石被下载。虽然使用RubyGems有很多好处,但仍然有一些挑战它没有解决。其中一些是:

  • 长且网络密集的构建过程
  • 脱机访问包和元数据
  • 宝石的安全性和访问控制
  • 共享内部和外部宝石
  • 二进制版本跟踪以重现构建
  • 根据不同的标准搜索宝石
  • 系统的稳定性和可靠性
  • 宝石的定制处理
  • 工件的维护和监控

Artifactory是一个二进制存储库管理器管理您组织内的所有包,无论是内部开发的,从RubyGems.org下载的还是从其他第三方资源下载的。2022世界杯阿根廷预选赛赛程这篇白皮书描述了Artifactory如何解决上述问题,极大地减少了开发和构建时间,同时要求您的组织付出很少的努力。

1.减少网络流量并优化构建

由于您的大部分代码可能是组装而不是构建的,因此您希望确保从RubyGems.org下载的包的使用是优化的。两个(或200个)开发人员使用相同的gem分别下载它是没有意义的。

Artifactory是开发人员和RubyGems.org之间的中介,并将其作为一个远程存储库.一旦gem下载完成,Artifactory将其存储在本地缓存中。在接收到后续请求时,Artifactory对请求的gem执行智能校验和搜索,如果已经下载了gem,则提供本地缓存的副本。因此,任何gem只下载一次,然后在本地对组织中的所有其他开发人员可用(从而减少网络流量)。当然,这对每个开发人员都是透明的。一旦Ruby客户端被配置为通过Artifactory访问宝石,开发人员就可以继续做她最擅长的事情,并让Artifactory来管理宝石。

如果我们从构建服务器的角度来看网络流量,好处是显而易见的。一个典型的项目可能需要从RubyGems.org上获得数十个甚至数百个宝石。对于构建这些项目的服务器,必须下载所有gems并使其对服务器环境可用,这可能会在网络上产生千兆字节的数据流量。下载所有这些必需的宝石需要大量的时间,这会延迟构建过程。通过在本地缓存宝石,构建过程会更快,并减少网络开销。

远程存储库

远程存储库作为在远程站点(如NuGet Gallery或其他NuGet存储库)管理的存储库的缓存代理。工件根据控制缓存和代理行为的各种配置参数在远程存储库中存储和更新。

2.RubyGems.org的可靠访问

作为Ruby开发人员,Rubygems.org是您经常需要的宝贵资源。但由于Rubygems.org是一个远程资源,如果它宕机或网络出现问题,你该怎么办?如果"你"实际上是构建服务器?

Artifactory为Rubygems.org API提供了丰富而广泛的支持,因此对于使用RubyGems的开发人员来说是透明的。对于Artifactory来说,Rubygems.org只是另一个远程存储库。当你请求一个宝石时,Artifactory可以从本地缓存提供它,有效地屏蔽你与Rubygems.org或网络的任何问题。您将始终可以访问系统中的gem,并且您的构建不会因为网络或Rubygems.org的问题而受到影响。

构建服务器集成

Artifactory完全支持当今最流行的CI系统,如Jenkins, Bamboo和TeamCity。构建服务器在创建构建时使用Artifactory来解析依赖关系,但也使用Artifactory作为目标将构建输出部署到相应的本地存储库。Artifactory更进一步,提供了部署工件、依赖项、环境和系统属性的完全可见性,以支持完全可复制的构建。

Ruby_scheme_1

3.全面支持Docker

随着Docker技术的不断发展,它的使用也在不断增长。如果您还没有在您的组织中使用Docker,可能很快就会这样做。所以现在,除了管理之外,您还需要管理Docker映像。但是没有必要安装和维护另一个工具。Artifactory是一个成熟的Docker存储库,支持所有Docker Registry api。这允许Docker客户端直接与Artifactory合作,为企业Docker用户带来了几个好处。

使用本地存储库就可以分发和共享图像在组织内轻松管理不同团队之间的映像。您甚至可以将您的Artifactory Docker存储库复制到Artifactory的远程实例中,以便与地理位置遥远的站点的同事共享映像。

Artifactory提供细粒度访问控制为您组织的映像提供安全的“docker push”和“docker pull”有效提供安全、私有的Docker存储库超出Docker可信注册表提供的安全性。

使用Artifactory,而不是Docker Hub上的私有存储库,消除了与互联网连接相关的任何问题可靠且一致地访问图像.并与Artifactory运行在一个高可用性配置您的Docker映像具有业界无可比拟的系统稳定性和可用性。

Artifactory的智能搜索可以很容易地找到存储在系统中的任何Docker映像。Docker Registry API支持Docker客户端的基本搜索,但Artifactory提供了更多。内置搜索通过单击操作来回答常见需求,自定义属性提供了满足各种特定需求的灵活性,Artifactory Query Language提供了一种简单的方法来制定复杂的查询,让您可以根据任何标准集找到图像。

无论你是已经开始使用Docker,还是只是在评估如何将它引入到你的组织中,一旦你使用Artifactory来管理你的,你就已经覆盖了Docker映像。

4.安全及访问控制

每个组织都需要实施安全策略,以便人们只能访问他们被授权使用的内部资源。2022世界杯阿根廷预选赛赛程但是如何控制组织中的人员从外部资源下载的内容呢?2022世界杯阿根廷预选赛赛程如何控制首先访问哪些外部资源?2022世界杯阿根廷预选赛赛程然后,您如何控制组织中的人们将他们下载的或正在处理的不同工件放在哪里?

Artifactory可以在多个级别上提供安全性和访问控制。从限制完整的存储库到限制单个工件,从任何规模的组到单个开发人员。

作为第一道防线,Artifactory支持虚拟存储库.通过虚拟存储库,您可以确保开发人员只访问经过批准的可靠第三方资源。2022世界杯阿根廷预选赛赛程对于更细粒度的访问控制,Artifactory允许您使用带有通配符的命名模式来定义“excluded”或“Includes”以供下载。使用这种灵活的机制,您可以定义任何东西,从整个存储库排除您的组织访问,到在存储库中包含一个可能对您的开发工作至关重要的工件。一旦您决定了可以下载到服务器上的内容,您就可以定义哪些用户或用户组可以使用您可以配置的完整权限来访问它。如果您关心的是对服务器的访问,那么Artifactory提供了与最常见的访问协议(如LDAP、SAML、Crowd等)的完全集成。Artifactory中全面的安全和访问控制功能通过确保开发人员只能访问他们被授权的存储库来帮助您管理开发过程。例如,您可以确保开发人员可以将发布目标部署到QA存储库中,但是只有经过授权的QA人员,他们已经确保了一个发布候选已经满足了所需的标准,才能将其提升到“发布”存储库中。

虚拟存储库

虚拟存储库封装了任意数量的本地和远程存储库,并将它们表示为从单个URL访问的统一存储库。它为您提供了一种管理开发人员访问哪些存储库的方法,因为您可以自由地混合、匹配和修改虚拟存储库中包含的实际存储库。您还可以通过定义底层存储库顺序来优化工件解析,这样Artifactory将首先查看本地存储库,然后查看远程存储库缓存,只有这样Artifactory才会通过网络并直接从远程资源请求工件。对于开发人员来说,这很简单。只需请求包,Artifactory将根据您组织的策略安全且优化地访问它。

5.在整个组织中与本地存储库共享专有包

正如前面提到的,您的大部分产品可能是由组件组装而成的,但是您仍然希望最大限度地利用您的专有代码。如果您创建了一个包,您希望能够轻松地与团队和整个组织中的其他开发人员共享它。

Artifactory让你创造局部存储库在这里,您可以部署所有专有宝石,方便访问。开发人员只需要配置他们的环境一次,就可以通过Artifactory访问gems,从那时起,它就是透明的。所有特定宝石的请求将通过Artifactory。开发人员只需指定需要哪个gem, Artifactory知道在哪里可以找到它,并且总是提供存储在本地存储库中的相同的单一副本。但是,如果您希望与位于组织地理位置较远的站点的同事共享您的包,该怎么办呢?

Artifactory支持将存储库复制到本地网络之外的另一个Artifactory实例。复制的存储库会定期自动与它们的源同步,这样您的工件就可以提供给不同的团队,无论他们位于世界各地。

局部存储库

本地存储库是物理的、本地管理的存储库,您可以将工件(如gem)部署到其中。通常,它们用于部署内部和外部发布以及开发构建,但它们也可以用于存储公共存储库(如第三方商业组件)中不广泛可用的二进制文件。使用本地存储库,您的所有内部gem都可以从跨组织的单个访问点从一个公共URL获得。

6.完全可复制的构建

“bug”、“缺陷”或“问题”,不管你怎么称呼它们——它们总是困扰着我们。当它们在我们将它们发布给世界之后才出现时,修复它们就变得迫切起来。但是,为了调试问题,我们希望能够重新生成发现问题的特定版本。考虑到我们开发和下载的模块,以及所有随后的依赖关系和构建环境,这可能是一项艰巨的任务。

Artifactory通过存储详尽的构建信息提供了内置的版本跟踪,这使得忠实地重现任何构建变得很容易。存储的信息包括特定的gem版本、依赖关系、系统属性、环境变量、用户信息、时间戳等等。但Artifactory给你的远不止这些。使用内置的“Build Diff”工具,您可以比较构建,从而确切地知道报告错误的版本引入了哪些更改。

7.智能搜索宝石使用构建号和自定义属性

考虑到系统中有大量的包,找到特定的包有时会非常复杂。

Artifactory为您提供了灵活的搜索功能,允许您根据任何固有属性的组合(如名称、版本、时间戳、校验和和更多。Artifactory还提供了一些常见的内置搜索。例如,您可以向Artifactory询问任何gem的“最新”版本,而不必指定特定的版本号。Artifactory知道如何比较任何存储库中gem的所有不同版本,并提供可用的最新版本。Artifactory在这方面更进一步,允许您通过构建号搜索gems,非常类似于在源代码控制系统中使用分配给源文件的版本标记。这个强大的功能使您能够根据构建号找到进入任何构建的所有特定宝石。

但是智能搜索的全部威力伴随着Artifactory为您提供的自定义属性的灵活性,您可以将这些属性分配给宝石,然后在搜索中使用。例如,您可以定义一个属性来分类宝石的状态,表明它们是否已经完成QA。然后,当决定将哪些宝石上传到产品中时,你可以确保你的搜索只提供那些已经被QA团队批准的宝石。有了所有这些功能,Artifactory灵活的智能搜索允许您使用与您的工作流相关的几乎任何规则集搜索宝石。

Checksum-based搜索

通过校验和搜索gem是Artifactory支持的一个强大功能,这要归功于通过校验和存储文件的独特方法。即使gem已被重命名、移动甚至部署到组织之外,您也可以将其追溯到原始版本并获得其完整的构建信息。只需通过校验和工具(支持MD5和SHA1)运行gem,并在Artifactory中运行“校验和”搜索来检索原始版本。

8.使用Artifactory高可用性(HA)系统的稳定性和可靠性

在您的产品开发中扮演如此核心的角色,托管您的gem(无论您下载它们还是开发它们)的服务器都可能成为您组hth华体会最新官方网站织的关键任务组件,这意味着任何停机都可能产生严重的后果。

Artifactory支持高可用性在同一个局域网上使用2个或更多的Artifactory服务器集群进行配置。这种冗余网络架构意味着不存在单点故障,只要Artifactory节点中至少有一个处于运行状态,您的系统就可以继续运行。这最大限度地提高了您的正常运行时间,并可以将其提高到“五个九”的可用性水平。您的系统还可以在不影响性能的情况下适应更大的负载突发。通过水平服务器可伸缩性,您可以轻松地增加容量,以满足组织增长时的任何负载需求,并且通过使用具有多个服务器的架构,Artifactory HA可以让您在没有系统停机的情况下执行大多数维护任务。

高可用性系统

对于组织来说任务关键的系统可以部署在高可用性配置中,以增加稳定性和可靠性。这是通过复制系统中的节点并将它们部署为冗余集群来实现的,从而消除任何单个节点上的完全可靠性。在高可用性配置中,不存在单点故障。如果任何特定节点宕机,系统将通过剩余的冗余节点继续无缝地、透明地对用户运行,不会停机,也不会降低整个系统的性能。

Ruby_scheme_3

9.具有“手表”和用户插件的高级包管理

虽然组织可能在如何管理软件包方面共享共同的最佳实践,但每个组织都是不同的,可能有一些独特的需求。

在Artifactory中,您可以定义“监视”,以便密切监视系统中的任何关键包。如果包被意外删除或移动,您可以立即收到警报,根据需要恢复它。但是Artifactory还提供了更加灵活和先进的包管理功能。

Artifactory为在包上执行的几乎每个操作生成一个事件,包括下载、部署、移动、复制等等。对于每一个这样的事件,你可以写一个插件它将执行组织策略所需的任何操作。例如,每次从RubyGems.org下载宝石时,您都可以运行病毒检查,以确保您的系统不会被一些讨厌的东西感染。

用户插件

用户插件为您提供了一种方法,可以使用组织所需的任何自定义行为来扩展Artifactory的功能。用Groovy编写的插件为您提供了实现行为的完全灵活性,例如操作下载的内容、查询安全信息、执行升级逻辑等等。在开发过程中,可以动态地更改和重新部署插件源文件,甚至可以使用行业标准ide对它们进行调试。

10.为所有二进制文件提供通用的端到端解决方案

没有单一的工具或技术足以支持现代组织中的开发。有大量的打包格式、各种各样的构建工具、不同的持续集成系统和其他技术用于构建灵活且可维护的软件开发生态系统。管理所有不同打包格式的二进制文件并与生态系统的所有移动部分集成可能成为维护的噩梦。

Artifactory从头开始设计,以适应任何开发生态系统。Artifactory独特地构建在基于校验和的存储上,支持任何存储库布局,因此可以为任何打包格式提供本地级支持。本质上,无论您使用何种打包格式,Artifactory都可以存储和管理二进制文件,并且对相应的打包客户端是透明的。客户端使用Artifactory的方式与使用本机存储库的方式完全相同。例如,如果你正在使用Docker, Artifactory代理Docker Hub(或任何其他公共Docker注册中心),让你在本地Docker存储库中存储和管理自己的映像,并透明地与Docker客户端一起工作。如果你正在使用node.js, Artifactory代理npmjs.org(或任何其他公共Npm存储库),让你在本地Npm存储库中存储自己的包,并透明地与Npm客户端一起工作。类似的还有Vagrant, NuGet, Ruby, Debian, YUM, Bower, Python等等。

但是开发只是软件交付管道的一端。在一个包成为一个产品之前,它需要经历构建和集成的过程。市场上有许多构建和集成工具,但只有一种产品可以与所有工具一起工作。通过一组插件,Artifactory提供了与当今流行的CI系统(如Jenkins、Bamboo和TeamCity)的紧密集成。这些系统在创建构建时使用Artifactory来提供工件和解决依赖关系,并且还将其作为部署构建输出的目标。为了支持您无法应用插件的基于云的CI系统,Artifactory为您使用的构建工具(如Maven和Gradle)提供了插件,这些工具最终提供了相同级别的构建自动化。这涉及到开发和部署,但是一旦软件准备好供使用,如何分发软件呢?这就是Bintray的用武之地。

Bintray是JFrog的云下载中心,提供快速下载、细粒度访问控制、详细的统计数据和日志以及广泛的REST API。从Artifactory推广发行版本只是一个单击或API调用的问题。像Artifactory一样,Bintray与包无关,可以与所有不同的包客户端无缝地工作,因此它可以完全集成到任何持续集成/持续交付生态系统中。
Artifactory是一个通用存储库。它是位于开发生态系统中心的单一工具,与所有不同的技术“对话”,提高了生产力,减少了维护工作,并促进了不同部分之间的自动化集成。Artifactory和Bintray是一个完全自动化的软件分发管道的中心组件。

总结

本文展示了一个二进制存储库管理器(例如Artifactory)如何减少开发和构建时间,同时只需要您的组织付出很少的努力。这是通过管理包来完成的,确保对RubyGems.org等的最佳和可靠访问。这一切都可以通过全面直观的UI或支持构建自动化的丰富而广泛的api集来实现。由于Artifactory对它所管理的工件是不确定的,它不仅可以作为RubyGems的单一访问点,还可以作为所有二进制资源的单一访问点,无论它们来自NuGet Gallery、Maven Central或几乎任何其他第三方存储库。2022世界杯阿根廷预选赛赛程

要么快速释放,要么死亡