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

在过去的几年里,软件开发已经从专注于内部编码发展到广泛使用二进制组件,如免费开源和商业库以及内部构建的专有库。自动化过程的工具(如构建工具和CI服务器)的出现进一步促进了组件的使用,今天一个典型的软件项目将由更多的组装组件而不是专有代码组成。虽然这在成本和代码质量方面有明显的好处,但它也带来了一些挑战:

  • 如果远程存储库不可用,如何访问组件?
  • 如何优化长时间且网络密集的构建过程?
  • 如何管理安全性和控制对组件的访问?
  • 如何在组织中有效地共享组件?
  • 如果某个组件已经被某人下载,如何找到它?
  • 如何围绕组件的使用实现自定义行为?
  • 如何确保符合各种许可要求?
  • 您如何确保您的专有组件和下载的组件始终对您的团队可用?

所有这些问题的答案都是Artifactory,一个二进制Repository Manager它的功能是作为一个单独的接入点组织所有的二进制资源,包括专有库、远程工件和其他第三方资源,特别是PyPI。2022世界杯阿根廷预选赛赛程完全支持标准的Python工具,如pip和DistUtils, Artifactory透明地替换了您的Python存储库,以应对这些挑战,并在使用Python和开源库进行开发时提高组织的生产力。

1.对远程工件的可靠且一致的访问

作为Python开发人员,像PyPI这样的远程存储库是您经常需要的宝贵资源。2022世界杯阿根廷预选赛赛程但是如果这些资源出现问题或者网络出现问题,你该怎么办呢?2022世界杯阿根廷预选赛赛程

Artifactory是开发者和外部资源之间的中介。2022世界杯阿根廷预选赛赛程作为一名开发人员,您的所有请求都指向Artifactory,它通过将远程工件本地缓存到远程存储库.虽然这听起来像矛盾修辞法,但它实际上是有意义的。Artifactory上下文中的“远程存储库”指的是本地缓存,它是那些远程工件的代理。由于远程工件可以从本地网络上的缓存中随时获得,因此您不受外部网络问题的影响,即使远程资源出现故障也不会受到影响。即使在远程资源完全不存在的极端情况下,已经下载到本地缓存的任何工件仍然对您可用。作为开发人员,您可以继续您的开发工作,并且您的构建不会受到网络问题或存储库故障的阻碍。

白色paper_Pypi_scheme1

远程存储库

远程存储库充当在远程站点(如PyPI)管理的存储库的缓存代理。工件根据控制缓存和代理行为的各种配置参数在远程存储库中存储和更新。

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

由于大部分代码可能是组装而不是构建的,因此需要确保从PyPI或其他Python资源下载的包的使用得到了优化。2022世界杯阿根廷预选赛赛程对于使用相同包的两个(或200个)开发人员单独下载它是没有意义的。

除了可靠性之外,远程存储库的另一个好处是减少网络连接。一旦一个工件被下载,它就可以在本地对组织中的所有其他开发人员可用(从而减少网络流量)。当然,这对每个开发人员来说都是透明的。一旦工件通过Artifactory访问,开发人员就可以继续做她最擅长的工作,而把二进制管理留给Artifactory。

如果我们从构建脚本的角度来看网络流量,好处是显而易见的。一个典型的项目可能依赖于来自外部资源的几十甚至上百个工件。2022世界杯阿根廷预选赛赛程对于构建这些项目的工具,所有远程构件必须对服务器环境可用。下载所有这些必需的构件可能会在网络上生成千兆字节的数据流量,这将花费大量的时间来延迟构建过程。通过在本地缓存远程工件,构建过程会更快,需要的网络连接也会更少。

白色paper_Pypi_scheme2

3.全面支持Docker

作为码头工人技术在不断发展,它的用途在不断增长。如果您还没有在您的组织中使用Docker,那么您可能很快就会使用Docker。所以现在,除了管理Python包之外,您还需要这样做管理码头工人的图片.但是没有必要搭载和维护另一个工具。Artifactory是一个成熟的Docker存储库,支持所有Docker Registry api。这允许Docker客户端直接与Artifactory合作,为企业Docker用户带来了一些好处。

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

Artifactory提供细粒度的访问控制以安全的“码头员推”和“码头员拉”有效地提供您组织的映像安全的、私有的Docker存储库超出Docker可信注册表提供的安全性。

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

Artifactory的智能搜索使它很容易找到任何Docker映像存储在您的系统。对Docker Registry API的完全支持支持使用Docker客户机进行基本搜索,但Artifactory提供的功能远不止这些。内置的搜索通过单击操作来回答常见的需求,自定义属性提供了满足各种特定需求的灵活性,而Artifactory Query Language提供了一种简单的方法来制定复杂的查询,允许您基于任何标准集查找图像。

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

4.与构建生态系统的完全集成

虽然让开发人员更容易、更有效地访问二进制构件很重要,但对于每天可能多次运行构建的构建系统来说,这更重要。

通过一组插件,Artifactory提供了与当今流行的CI系统(如Jenkins、Bamboo和TeamCity)的紧密集成。这些系统在创建构建时使用Artifactory来提供工件和解析依赖关系,并将其作为将构建输出部署到相应本地存储库的目标。

通过Artifactory运行构建的主要好处之一是完全可复制的构建。Artifactory存储详尽的构建信息,包括特定的工件版本、模块、依赖项、系统属性、环境变量、用户信息、时间戳等。有了这些信息,就很容易在任何时候忠实地复制构建。此外,通过内置的“Diff”工具,您可以比较构建,从而确切地知道从一个版本到另一个版本引入了哪些更改。当试图追踪发布的特定版本中报告的错误时,这些功能可能是无价的。

Artifactory还简化了发布管理。一系列简单的设置配置了诸如登台、构建升级、VCS标记等等,本质上自动化了发布管理过程。

但是,如果您使用的是基于云的CI系统,而不能应用插件,会发生什么情况呢?在这种情况下,Artifactory直接为构建工具本身提供插件,最终提供相同级别的构建自动化。本质上,由于Artifactory是平台无关的,它可以与跨组织内所有构建生态系统的通用工具集成。最后,一旦您的构建实现了自动化,Artifactory将根据组织的维护策略清理旧的构建,从而使您的系统免于混乱。

白色paper_Pypi_scheme3

5.安全及访问控制

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

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

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

虚拟存储库

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

6.在您的组织中分发和共享工件

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

使用局部存储库, Artifactory为您提供了一个存储内部二进制文件的中心位置。当所有团队都知道可以从单个URL访问任何工件时,访问本地工件和管理不同团队之间的依赖关系就变得非常容易。但是,如果您想要与位于您组织中地理位置较远的站点的同事共享包呢?

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

局部存储库

本地存储库是物理的、本地管理的存储库,您可以将工件部署到其中。通常,它们用于部署内部和外部版本以及开发构建,但它们也可以用于存储在公共存储库(如第三方商业组件)中没有广泛使用的二进制文件。通过使用本地存储库,您的所有内部资源都可以从跨组织的单一访问点通过一个公共URL访问。2022世界杯阿根廷预选赛赛程

7.使用构建号和自定义属性智能搜索二进制文件

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

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

但是智能搜索的全部功能伴随着Artifactory提供的灵活性,您可以将自定义属性分配给包,然后在搜索中使用这些属性。例如,您可以定义一个属性来分类构建工件的状态,指出它们是否已经完成QA。然后,在决定将哪些工件上传到生产中时,您可以确保搜索只提供经过QA团队批准的二进制文件。有了所有这些功能,Artifactory灵活的智能搜索允许您使用与您的工作流相关的几乎任何规则集来搜索包。

Checksum-based搜索

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

8.用户插件

尽管Artifactory提供了一组广泛的特性来管理二进制资源,但它不可能满足不同组织可能具有的所有需求。2022世界杯阿根廷预选赛赛程输入用户插件。

用户插件提供了一长串入口点,这些入口点有效地扩展了Artifactory REST API,提供了实现复杂行为的简单方法。这为您提供了极大的自由,可以在您的工作流中支持几乎任何定制需求,包括调度任务、管理安全和身份验证、部署、构建集成和升级逻辑、维护和清理等等。为了简单起见,用户插件被编写为Groovy脚本,并使用一个简单的DSL将它们包装为扩展点中的闭包。插件可以动态更改和重新部署,甚至可以在您最喜欢的IDE中进行调试。

9.许可证遵从性和开放源码治理

是否曾经因为有人突然意识到你必须遵守一堆许可要求而被耽搁?

Artifactory可以帮助防止这种情况的发生。在将任何包部署到您的存储库之后,Artifactory对您的工件和所有后续依赖项执行许可证检查,并对所有许可证需求提供即时反馈。这可以让你提前准备,以确保在开发周期的早期遵从,避免在“关键时刻”出现不必要的延迟。通过与Black Duck Code Center集成,您可以在通过Artifactory管理所有二进制文件上传的同时,利用全面的许可遵从性和开源治理特性。

10.系统的稳定性和可靠性与Artifactory高可用性

在包管理中扮演这样一个中心角色,您的Binary Repository Manager可以成为组织的关键任务组件。任何停机都可能对您的工作效率造成严重的后果,您需要确保开发人员可以随时访问您的Python存储库。

Artifactory支持高可用性在同一局域网上使用2个或更多Artifactory服务器的集群进行网络配置。冗余网络架构意味着没有单点故障,只要至少有一个Artifactory节点是可操作的,您的系统就可以继续运行。这将使您的正常运行时间最大化,并可以将其提高到“五个9”的可用性级别。此外,您的系统可以在不影响性能的情况下适应更大的负载突发。通过水平服务器可伸缩性,您可以很容易地增加您的容量,以满足组织增长时的任何负载需求。最后,通过使用具有多个服务器的体系结构,Artifactory HA允许您在没有系统停机的情况下执行大多数维护任务。

高可用性系统

对于一个组织来说,被认为是关键任务的系统可以部署在High Availability配置中,以增加稳定性和可靠性。这是通过复制系统中的节点并将它们部署为冗余集群来实现的,从而消除任何单个节点上的完全可靠性。在High Availability配置中没有单点故障。如果某个特定节点出现故障,系统将通过剩余的冗余节点继续无缝地、透明地对其用户进行操作,而不会出现故障时间或整体系统性能的下降。

白色paper_Pypi_scheme4

11.维护和监控

生成的包的数量可能会快速增长。如果没有适当的管理,您的系统很快就会被陈旧的和不相关的包堵塞。

Artifactory通过自动定时清理过程使您的系统保持有序,避免混乱。通过一些简单的设置,您可以安排任务来清理旧的构建和未使用的包。您可以设置磁盘空间使用限制和监视磁盘空间使用情况,或者定义“监视”,以便在最关键的包发生更改时接收警报。通过广泛的REST API, Artifactory几乎可以支持任何您想要在组织的脚本中实现的基于规则的清理协议。

12.适用于所有二进制文件的通用端到端解决方案

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

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

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

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

总结

本文展示了像Artifactory这样的二进制存储库管理器如何通过管理和优化对Python包的访问来提高组织的开发和DevOps团队的生产力。由于Artifactory不知道它所管理的二进制类型,它可以使用任何Python包和存储库,用于几乎任何其他二进制格式,如rpm、RubyGems、NuGet等,以支持您的组织使用的不同平台,并在上传构建和下载工件时提供对所有二进制文件的集中控制。

快速释放,否则死亡