NuGet:在使用NuGet开发时使用二进制存储库管理器的10个理由
在过去的几年里,软件开发已经从专注于内部编码发展到广泛使用二进制组件,例如免费的开源库和商业库以及内部构建的专有库。早在2010年进行的一项调查中,98%的企业级公司报告说他们使用开源软件1今天,一个典型的软件项目将由更多的组装组件组成,而不是专有代码。公司在发展。. NET框架也不例外。自2010年推出以来,NuGet Gallery的使用率已经增长,从2014年1月的1100多万包下载到4月的2500多万包2。虽然使用NuGet有很多好处3.尽管如此,仍有一些挑战没有得到解决。其中一些是:
1.长且网络密集的构建过程
2.脱机访问包和元数据
3.NuGet包的安全和访问控制
4.共享内部和外部NuGet包
5.二进制版本跟踪以重现构建
6.根据不同的条件搜索包
7.承载NuGet包的系统的稳定性和可靠性
8.定制处理包裹
人工智能是一个二进制存储库管理器管理您组织内的所有NuGet包,无论是内部开发,从NuGet库下载或从其他第三方资源下载。2022世界杯阿根廷预选赛赛程本白皮书描述了Artifactory如何解决上述问题,从而大大减少了开发和构建时间,同时只需要您的组织付出很少的努力。

1.减少网络流量并优化构建
由于您的大部分代码可能是组装而不是构建的,因此您希望确保对从NuGet Gallery下载的包的使用是优化的。两个(或200个)开发人员使用同一个包单独下载它是没有意义的。
Artifactory是开发人员和NuGet Gallery之间的中介,并将其作为一个远程存储库。下载包后,Artifactory将其存储在本地缓存中。在接收到后续请求后,Artifactory对请求的包执行智能校验和搜索,如果它已经下载,则提供本地缓存副本。因此,任何包只下载一次,然后组织中的所有其他开发人员都可以在本地使用(从而减少了网络流量)。当然,这对单个开发人员来说都是透明的。一旦将NuGet客户端配置为通过Artifactory访问包,开发人员就可以继续做自己最擅长的事情,并将包管理留给Artifactory。
如果我们从构建服务器的角度来看网络流量,好处是显而易见的。一个典型的项目可能需要数十甚至数百个来自NuGet库的包。为了让服务器构建这些项目,必须下载所有包并使其可用于服务器环境,这可能会在网络上生成兆字节(如果不是千兆字节)的数据流量。下载所有这些必需的包需要花费大量的时间,这会延迟构建过程。通过在本地缓存所有这些包,构建过程要快得多,并且导致的网络连接要少得多。
远程存储库
远程存储库作为远程站点管理的存储库(如NuGet Gallery或其他NuGet存储库)的缓存代理。根据控制缓存和代理行为的各种配置参数,在远程存储库中存储和更新构件。
2.可靠的访问NuGet画廊
作为。net开发人员,NuGet库是您经常需要的宝贵资源。但是由于NuGet Gallery是一个远程资源,如果它出现故障或者网络出现问题,您该怎么办?如果"你"实际上是一个构建服务器?
Artifactory为NuGet API提供了丰富而广泛的支持,因此对使用NuGet Gallery的开发人员是透明的。对于Artifactory来说,Nuget Gallery只是另一个远程存储库。当您请求NuGet包或元数据时,Artifactory可以从本地缓存中提供它,有效地将您从图库或网络的任何问题中筛选出来。您将始终可以访问系统中的软件包,并且您的构建不会因网络或NuGet Gallery的问题而受到阻碍。

构建服务器集成
Artifactory与MSBuild项目紧密集成,并完全支持当今最流行的CI系统,如Jenkins、Bamboo和TeamCity。构建服务器在创建构建时使用Artifactory来解析依赖项,但也使用Artifactory作为目标,将构建输出部署到相应的本地存储库。Artifactory更进一步,提供了部署工件、依赖项、环境和系统属性的完全可见性,以支持完全可复制的构建。
3.完全支持Docker
随着Docker技术的不断发展,它的使用也在不断增长。如果您还没有在您的组织中使用Docker,那么您很可能很快就会这样做。现在,除了管理NuGet包之外,还需要管理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注册API的全面支持支持使用Docker客户端进行基本搜索,但Artifactory提供的功能更多。内置搜索可以通过单击操作满足常见需求,自定义属性提供了满足各种特定需求的灵活性,Artifactory Query Language提供了一种简单的方法来制定复杂的查询,让您可以根据任何标准集找到图像。
无论您是已经开始使用Docker还是正在评估如何将其引入您的组织,一旦您使用Artifactory来管理您的NuGet包,您就已经涵盖了Docker映像。
4.安全和访问控制
每个组织都需要实现安全策略,以便人们只能访问他们被授权使用的内部资源。2022世界杯阿根廷预选赛赛程但是,如何控制组织中的人员从Nuget Gallery或其他外部资源下载的内容呢?您如何首先控制访问哪些外部资源?2022世界杯阿根廷预选赛赛程然后,您如何控制组织中的人员将他们下载或正在处理的不同软件包放在哪里?
Artifactory可以提供不同级别的安全性和访问控制。从完整的存储库到单个工件,从任意大小的组到单个开发人员。
作为第一道防线,Artifactory支持虚拟存储库。通过虚拟存储库,您可以确保开发人员只访问已批准的可靠第三方资源。2022世界杯阿根廷预选赛赛程您还可以通过定义底层存储库顺序来优化包解析,这样Artifactory将首先查看本地存储库,然后查看远程存储库缓存,然后Artifactory将通过网络并直接从远程资源请求包。对于开发者来说,这很简单。只需按名称请求包,Artifactory将根据您组织的策略安全且最佳地访问它。
对于更细粒度的访问控制,Artifactory还提供了一种灵活的机制,可以使用正则表达式为下载定义“排除”或“包括”。这允许您定义任何东西,从整个存储库排除在您的组织访问之外,到在存储库中包含单个工件,这可能对您的开发工作至关重要。一旦确定了可以下载到服务器的内容,就可以根据Active Directory服务器中的定义定义哪些用户或组可以访问它。通过这一套全面的安全和访问控制功能,Artifactory可以帮助您管理开发过程,确保下载的包是安全的,开发人员只能将包部署到授权的存储库中。例如,您可以确保开发人员可以将发布目标部署到QA存储库中,但是只有经过授权的QA人员才能将其提升到“发布”存储库中,因为他们已经确保了发布候选版本符合所需的标准。
虚拟存储库
虚拟存储库封装了任意数量的本地和远程存储库,并将它们表示为从单个URL访问的统一存储库。请求的包按照在虚拟存储库中定义的顺序从底层存储库解析。
5.通过本地存储库在整个组织中共享专有包
如前所述,您的大部分产品可能由组件组装而成,但是您仍然希望充分利用您的专有代码。如果您创建了一个包,您希望能够轻松地与团队中的其他开发人员和整个组织共享它。
Artifactory允许您创建局部存储库您可以在这里部署所有专有的NuGet包,以便于访问。开发人员只需要配置他们的环境一次就可以通过Artifactory访问NuGet包,从那时起它就是透明的。对特定包的所有请求都将通过Artifactory。开发人员只需指定需要哪个包,Artifactory知道在哪里可以找到它,并且总是提供存储在本地存储库中的相同的单个副本。但是,如果您希望与组织中地理位置较远的同事共享您的包,该怎么办呢?
Artifactory支持将您的存储库复制到本地网络之外的Artifactory的另一个实例。复制的存储库会周期性地自动与它们的源同步,这样您的工件就可以提供给世界各地的不同团队,无论他们位于何处。
局部存储库
本地存储库是物理的、本地管理的存储库,您可以将工件发布到其中。通常,它们用于发布内部和外部版本以及开发构建工件。使用本地存储库,您的所有内部NuGet包都可以从单个访问点在整个组织中使用。
6.完全可复制的构建
“bug”、“缺陷”或“问题”,无论你怎么称呼它们——它们都困扰着我们。有时,它们只是在我们向世界释放它们之后才出现,然后修复它们就变得紧迫了。但是,为了调试问题,我们希望能够重现发现问题的特定版本。考虑到我们开发和下载的模块,以及所有随后的依赖项和构建环境,这可能是一项艰巨的任务。
Artifactory通过存储详尽的构建信息来提供内置的版本跟踪,这使得忠实地重现任何构建都很容易。存储的信息包括特定的包版本、依赖项、系统属性、环境变量、用户信息、时间戳等等。但Artifactory给你的远不止这些。使用内置的“Build Diff”工具,您可以比较构建,从而确切地知道在报告错误的版本中引入了哪些更改。

7.使用构建号和自定义属性智能搜索包
考虑到系统中有大量的包,找到特定的包有时会变得相当复杂。
Artifactory为您提供了灵活的搜索功能,允许您基于任何固有属性的组合来查找包,例如名称、版本、时间戳、校验和和更多。Artifactory还提供了一些常见的内置搜索。例如,您可以向Artifactory询问任何包的“最新”版本,而不必指定特定的版本号。Artifactory知道如何比较任何存储库中包的所有不同版本,并提供可用的最新版本。Artifactory的构建搜索更进一步,允许您根据构建号搜索包,非常类似于在源代码控制系统中使用分配给源文件的版本标记。
这个强大的特性使您能够根据构建号找到进入任何构建的所有特定构件。但是智能搜索的全部功能来自Artifactory为您提供的自定义属性的灵活性,您可以将这些属性分配给包,然后在搜索中使用。例如,您可以定义一个属性来对构建工件的状态进行分类,以指示它们是否完成了QA。然后,在决定将哪些工件上传到生产环境中时,您可以确保您的搜索只提供已被您的QA团队批准的包。Artifactory的智能搜索使您能够灵活地使用与您的工作流程相关的任何规则集来搜索包。
Checksum-based搜索
Artifactory支持通过校验和搜索包的强大功能,这要归功于通过校验和存储文件的独特方法。即使包已被重命名、移动或甚至部署到组织外部,您也可以将其追溯到原始版本并获得其完整的构建信息。只需通过校验和工具运行包(MD5和SHA1都支持),并在Artifactory中运行“校验和”搜索以检索原始版本。
8.具有人工高可用性(HA)的系统稳定性和可靠性
托管NuGet包的服务器(无论您是下载它们还是开发它们)在产品开发中扮演着如此重要的角色,它们可能成为hth华体会最新官方网站组织的关键任务组件,这意味着任何停机时间都可能产生严重后果。
Artifactory支持高可用性在同一局域网中使用2个或更多Artifactory服务器集群的配置。这种冗余网络体系结构意味着不存在单点故障,只要至少有一个Artifactory节点可操作,您的系统就可以继续运行。这最大限度地延长了您的正常运行时间,并可以将其提高到“五个9”可用性的级别。您的系统还可以在不影响性能的情况下适应更大的负载突发。通过水平服务器可伸缩性,您可以随着组织的增长轻松地增加容量以满足任何负载需求,并且通过使用具有多个服务器的体系结构,Artifactory HA允许您在没有系统停机的情况下执行大多数维护任务。
高可用性系统
对于组织来说,被认为是关键任务的系统可以部署在高可用性配置中,以提高稳定性和可靠性。这是通过复制系统中的节点并将它们部署为冗余集群来实现的,以消除任何单个节点上的完全可靠性。在高可用性配置中,不存在单点故障。如果任何特定节点发生故障,系统将继续通过剩余的冗余节点对其用户无缝透明地运行,不会出现停机时间或整个系统的性能下降。
9.先进的包管理与“手表”和用户插件
虽然组织可能在如何管理他们的包方面共享共同的最佳实践,但是每个组织都是不同的,并且可能有一些独特的需求。
在Artifactory中,您可以定义“监视”,让您密切监视系统中的任何关键包。如果包被意外删除或移动,您可以立即收到警报,以便根据需要恢复它。但是Artifactory还提供了更加灵活和先进的包管理功能。
Artifactory几乎为包上执行的每个操作生成一个事件,包括下载、部署、移动、复制等等。对于每一个这样的事件,你可以写一个插件它将执行您组织的策略所要求的任何操作。例如,每次从NuGet Gallery下载一个包时,您都可以运行一个病毒检查,以确保您的系统不会被一些讨厌的东西感染。
用户插件
用户插件为您提供了一种使用组织所需的任何自定义行为来扩展Artifactory功能的方法。插件是用Groovy编写的,使您能够完全灵活地实现诸如操作下载内容、查询安全信息、执行提升逻辑等行为。在开发过程中,可以动态地更改和重新部署插件源文件,甚至可以使用行业标准ide对它们进行调试。
10.所有二进制文件的通用端到端解决方案
没有一种工具或技术足以支持现代组织中的开发。有大量的打包格式、各种构建工具、不同的持续集成系统和其他技术用于构建灵活且可维护的软件开发生态系统。管理所有不同打包格式的二进制文件并与生态系统的所有移动部分集成可能成为维护的噩梦。
Artifactory从头开始设计,以适应任何开发生态系统。Artifactory独特地构建在基于校验和的存储上,支持任何存储库布局,因此可以为任何打包格式提供本机级别的支持。从本质上讲,无论您使用哪种打包格式,Artifactory都可以存储和管理二进制文件,并且对相应的打包客户端是透明的。客户端使用Artifactory的方式与使用本机存储库的方式完全相同。例如,如果你正在使用Docker, Artifactory代理Docker Hub(或任何其他公共Docker注册表),允许你在本地Docker存储库中存储和管理自己的映像,并透明地与Docker客户端一起工作。如果您正在使用NuGet, Artifactory代理NuGet库(或任何其他公共NuGet库),允许您将自己的包存储在本地NuGet库中,并透明地与NuGet客户端一起工作。类似的还有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这样的二进制存储库管理器如何减少开发和构建时间,同时只需要您的组织付出很少的努力。这是通过管理包来完成的,确保对NuGet库的最佳和可靠访问。这一切都可以通过一个全面而直观的UI,或者通过一组丰富而广泛的支持构建自动化的api来实现。由于Artifactory对它所管理的工件是不可知的,所以它不仅可以作为NuGet包的单一访问点,还可以作为所有二进制资源的单一访问点,无论它们来自RubyGems.org、Maven Central还是几乎任何其他第三方存储库。2022世界杯阿根廷预选赛赛程
参考文献
1.2010年开源系统管理调查。(2010)。[电子书]第2页。可以通过:/ zenossblog / 2010/08/10/2010-trends-in-open-source-systems-management https://community.zenoss.org博客[获取日期:2014年3月24日]
https://community.zenoss.org/servlet/JiveServlet下载/ 38 - 3009 / OpenSourceManagement.pdf[获取日期:2014年3月24日]
2.Nuget.org(2013)。NuGet画廊|统计。[网上]可于:https://www.nuget.org/stats[2014年5月11日访问]。
3.Grace, A.(2012年5月9日)。NuGet入门。Coders Barn,[网络日志]摘自:https://codersbarn.com/post/2012/05/09/An-Introduction-to-Nuget.aspx[2014-03-24]。
