云客户?
免费开始>
在MyJFrog中升级>
云的新功能>

搜索





概述

JFrog平台托管以下存储库类型:

本地和远程存储库是真正的物理存储库,而虚拟存储库实际上是它们的聚合,用于创建用于搜索和解析工件的受控域。

管理存储库,请转至存储库管理。

您还可以使用Quick Setup,它使您能够一次性为选定的包类型创建存储库。通过几个简单的步骤,您可以为所选择的每种包类型创建本地、远程和虚拟存储库。

步骤1从用户下拉菜单中选择Quick Setup。

步骤2选择一个或多个包类型来创建默认存储库。

步骤3为存储库组提供一个名称。该名称将用作帮助您管理存储库的前缀。

步骤4单击Create。

您已经完成了存储库的创建,您可以继续配置您的客户机,并部署工件,如包管理

每个存储库一个包类型

在创建存储库时,必须选择特定的包类型;这是存储库的基本特征,以后不能更改。一旦设置了存储库类型,系统将对工件进行索引,并为上传的每个包计算相应的元数据,从而在解析工件时优化性能。请注意,虚拟存储库只能包含相同类型的存储库。

页面内容

JFrog存储库命名规则和限制

  • 名字可以是空的
  • 名字可以与Artifactory实例中的另一个存储库相同。
  • 最大字符数:
    • 对于本地和虚拟存储库= 64
    • 对于远程和联邦存储库= 58
  • 名字可以包含以下字符:/\\|*<>
  • 名字可以包括以下内容:
    • 。.
    • &
    • Jfrog-usage-logs
    • jfrog-billing-logs
    • jfrog-logs
    • artifactory-build-info
    • artifactory-pipe-info
    • Auto-trashcan
    • jfrog-support-bundle
    • _intransit
    • Artifactory-edge-uploads
    • release-bundles
  • 名字可以从下面开始:
    • jfrog-system-reserved
    • Jfrog-artifactory-system

欲了解更多信息,请参阅白皮书构建和命名人工存储库的最佳实践

通用存储库

您可以将存储库定义为通用的在这种情况下,它没有特定的类型,您可以上传任何类型的包。通用存储库不维护单独的包索引。要使用与特定包类型(例如yum、gem)关联的客户端,您应该创建一个匹配的存储库。通用存储库不维护单独的包索引,因为它们不特定于任何包类型。当您想要代理不支持的包类型、存储安装程序、导航文件、音频文件等时,它们非常有用。

上传错误的包类型

虽然系统不会阻止您上传错误类型的包到存储库,但我们强烈建议您在存储库类型和您上传的包之间保持一致性。如果您确实将错误类型的包上传到存储库,Artifactory将不会为该包建立索引或更新存储库的元数据。


局部存储库

本地存储库是物理的、本地管理的存储库,您可以在其中部署构件。
本地存储库中的构件可以使用以下URL直接访问:

http:// <主机>:<端口> / artifactory / < local-repository-name > / < artifact-path >

有关配置本地存储库的详细信息,请参考局部存储库页面


远程存储库

一个远程存储库充当在远程URL(其本身可能是另一个Artifactory远程存储库)上管理的存储库的缓存代理。根据控制缓存和代理行为的各种配置参数,在远程存储库中存储和更新构件。
您可以从远程存储库缓存中删除工件,但是您不能实际地将新工件部署到远程存储库中。

远程存储库中的构件可以使用以下URL直接访问:

http:// <主机>:<端口> / artifactory / < remote-repository-name > / < artifact-path >

这个URL将从缓存中获取一个远程工件,如果它还没有被存储的话。

在某些情况下,直接访问已经存储在缓存中的工件是有用的(例如,为了避免远程更新检查)。

要直接访问已经存储在缓存中的工件,您可以使用以下URL:

http:// <主机>:<端口> / artifactory / < remote-repository-name >缓存/ < artifact-path >

代理与镜像

远程存储库的作用是代理不是作为镜子。工件不会预先提取到远程存储库缓存中。它们只被获取和存储对需求当客户要求时。
因此,远程存储库不应该在创建后立即在其缓存中包含任何工件。只有当客户端开始使用远程存储库并发出请求时,工件才会被提取到缓存中。

有关配置远程存储库的详细信息,请参阅远程存储库页面。


虚拟存储库

虚拟存储库(或“存储库组”)在一个公共URL下聚合具有相同包类型的多个存储库。

通用虚拟存储库

根据其性质,包类型被指定为的虚拟存储库通用的可以聚合任何类型的存储库,但是通用虚拟存储库不维护任何元数据。

默认虚拟存储库(已弃用)

Artifactory提供了一个使用全局虚拟的选项,其中包含所有本地和远程存储库。

默认情况下,此选项是禁用的,要启用默认虚拟存储库编辑artifactory.system.properties位于JFROG_HOME美元/ artifactory / var / etc / artifactory并将以下标志设置为

##禁用全局'repo'的下载权限artifactory.repo.global.disabled=false

此更改需要重新启动Artifactory服务。

启用后,存储库可在以下位置使用:

http:// <主机名>:<口> / artifactory /回购

虚拟分辨率命令

当从虚拟存储库请求工件时,搜索或解析存储库的顺序为1首先是本地存储库,然后是r远程存储库缓存,最后是r远程存储库本身。

在每个库中,查询存储库的顺序取决于它们在配置中列出的顺序,如中所述一般决议令在下面。

中的有效搜索和解析顺序包括存储库列表视图中的基本设置选项卡。这在嵌套虚拟存储库时特别有用。有关配置虚拟存储库的更多详细信息,请参阅虚拟存储库页面。


联合存储库

来自JFrog Artifactory 7.18.3, JFrog平台使您能够创建联邦存储库,允许将工件及其元数据与位于多站点环境中的远程JFrog部署(JPDs)上的其他联邦类型的存储库进行镜像。Federated存储库的功能类似于JPD上的本地存储库,但它与位于其他JPD上的其他Federated成员在逻辑上组合在一起,以创建Federation。有关更多信息,请参见联合存储库


一般决议令

您可以设置搜索和解析每种类型的存储库(本地、远程和虚拟)的顺序,方法是在目录的相应部分中对它们进行相应排序配置存储库页面。要设置顺序,您需要将存储库添加到所选存储库的列表中,按照搜索它们以解析工件的顺序。

搜索存储库的顺序还受到其他因素的影响,例如安全特权、包含/排除模式以及处理快照和发布的策略。


常见的设置

其中一些设置对于本地、远程和虚拟存储库是常见的。这些都是在基本对应的选项卡新增/编辑屏幕。根据为存储库指定的包类型,可以在特定于类型的部分中找到其他设置。

包类型
包装类型。这必须在创建存储库时指定,并且一旦设置,就不能更改。
库的关键
存储库密钥。存储库的强制标识符,必须是唯一的。不能以数字开头,也不能包含空格或特殊字符。对于本地存储库,我们建议使用“-local”后缀(例如:“libs-release-local”)。
仓库布局
设置存储库用于存储和标识模块的布局。建议使用与定义的包类型相对应的推荐布局,并对上传的包进行索引,并相应地计算元数据。
公共描述
描述存储库的内容和用途的自由文本字段。
如果选择在此字段中插入链接,单击该链接将提示用户确认他们可能被重定向到新域。
内部描述
一个自由文本字段,用于添加关于存储库的其他注释。这些仅对管理员可见。
包含和排除模式

包括模式排除模式字段提供了一种在试图解析不同工件的位置时过滤掉特定存储库的方法。

在每个字段中,您可以指定一个类似ant的模式列表,以过滤入和过滤出工件查询。过滤的工作原理是从包含的模式(默认是全部)中减去被排除的模式(默认是无)。

例子

考虑一个存储库的包含模式和排除模式如下:

包括模式:org/apache/**,com/acme/**排除模式:com/acme/exp-project/**

在本例中,搜索存储库org/apache/maven/parent/1/1.pomcom/acme/project-x/core/1.0/nit-1.0.jar但不是com/acme/exp-project/ / 1.1 / san-1.1.jar核心因为com/acme/exp-project/ * *是否指定为排除模式

启用x射线索引

支持对存储库进行索引,以便进行安全性和遵从性分析。可以使用JFrog x光

最大唯一快照
根据存储库布局,指定应该存储的同一工件的唯一快照的最大数量。一旦达到这个数字并上传新的快照,旧的存储快照将被自动删除。

0(默认值)表示不限制唯一快照的个数。

处理版本

如果设置了,Artifactory允许您将发布工件部署到这个存储库中。


处理快照
如果设置了,Artifactory允许您将快照构件部署到这个存储库中。

使用Exclude模式避免安全风险

介绍如何使用“排除模式”避免以下安全风险。

使用排除模式防止内部伪影的暴露

您部署的任何专有构件都存储在本地存储库中,以便它们可用于安全且经过授权的内部使用。任何通过名称搜索您的内部构件的人都将通过Artifactory从本地存储库中提取它。

但是,考虑一下如果无意中定向了对内部构件的请求会发生什么组织的。

这可能发生的两个例子是:

  • 请求的工件名称中有一个简单的错别字
  • 开发人员请求的快照版本号不存在。

在这种情况下,由于系统没有在本地存储库中找到所请求的工件,因此它继续搜索系统中定义的远程存储库。搜索所有在返回"Not found"之前,检查系统中定义的远程存储库。

这带来了安全风险,因为在远程存储库上发出的任何请求都可能被记录下来公开查询的所有细节,包括可能包含敏感业务信息的完整工件名称

为远程存储库使用排除模式以避免诸如命名空间隐藏攻击之类的安全风险的最佳实践

为避免暴露上述敏感业务信息,我们强烈建议采用以下最佳实践:

  • 组织中使用的远程存储库列表应该在一个虚拟存储库下进行管理,所有请求都指向该虚拟存储库
  • 文件中指定所有内部构件排除模式虚拟存储库的字段(或of)每一个远程存储库)使用通配符来封装尽可能广泛的内部构件规范。

阅读更多关于作用域包和排除模式的信息>

使用排除模式防止内部封装暴露

代理不受信任的存储库或已被破坏的公共远程存储库可能会使您暴露于恶意工件。有时,这些存储库允许任何人部署自定义包。例如,对于npm,公共存储库是npmjs,任何人都可以部署他/她拥有的任何包的任何版本。如果一个包没有所有者(之前没有人部署过它的某个版本),任何人都可以部署它并声明它。

例如,假设您有一个名为“almo-common-utils”它的源代码是可公开访问的,例如,如果它被捆绑为可公开访问的产品或web应用程序的一部分,它是用Node和JFrog Artifactory编写的,它有一组远程(代理公共存储库)、本地(用于内部共享模块)和hth华体会最新官方网站虚拟存储库。

考虑以下几点:

  • 在公共存储库中,任何人都可以发布一个未限定作用域的库,并将其命名为他们想要的任何名称,例如:almo-common-utils”(除非存在名称冲突)。
  • 没有名为“almo-common-utils在公共存储库中(因为它是一个内部公司库),所以没有名称冲突。
  • 你有项目声明a依赖在“almo-common-utils“使用版本范围。例如,指定与主版本兼容的最新版本的范围。

这带来了安全风险,因为攻击者可以通过事先了解库来尝试攻击未受保护的组织。”almo-common-utils \”使用的库的主要版本(假设他们知道在组织中广泛使用版本3),以及源代码的内容。

攻击者可以克隆和修改源代码,将任何恶意软件嵌入其中,但仍然保持与原始代码的兼容性,并将其上传到存储库。almo-common-utils: 3.99.99”。这将创建一个内部库的版本更新劫持,当“almo-common-utils: ^ 3.0.0“是要求的,假的”almo-common-utils从存储库中获取。

为了避免暴露内部包和内部包版本劫持,我们强烈建议如下

  • 在远程存储库上使用排除模式。在远程存储库中排除不希望在组织外部搜索的包。您可以通过前缀(.npm / almo * / * *),按范围(.npm / @almo / *)或姓名(.npm / almo-encoder / * *).通过在任何公共远程存储库上设置这些排除模式,您可以有效地避免从公共存储库合并那些包。
  • 只创建和发布有作用域的包。在公共存储库中为您的公司注册一个正式组织,以拥有您的组织的范围,并且始终只发布有范围的包。这也简化了排除模式,因为您只需要排除有作用域的包排除在远程存储库中搜索的所有包。

    下面是一个使用范围"almo”从远程存储库。

使用包含模式避免性能问题

包含模式通过确保只有特定类型的工件可以驻留在本地存储库中,帮助您避免在本地存储库中出现混乱。在典型的场景中,系统将引用大型的通用存储库,例如JCenter或者Maven Central来解析工件。

此外,Artifactory可以引用任意数量的附加存储库,这些存储库可能承载更专门化和特定的工件集。

如果Artifactory接收到一组确定的工件的请求(例如,工件的特定版本),那么它将根据其解析顺序搜索不同的存储库,直到找到工件。

然而,如果Artifactory接收到一组不确定的工件的请求(例如,所有版本的maven-metadata.xml)那么它必须搜索所有它引用的存储库,直到它能够提供完整的响应。

在大多数情况下,组织下载的大部分工件将来自一个大型的通用存储库,但是在不确定的请求中性能会降低,因为Artifactory会继续搜索所有专门的存储库才能返回响应

对远程存储库使用包含模式以避免不必要和浪费的搜索的最佳实践

为避免在响应不确定性请求时执行不必要和浪费的搜索,我们强烈建议将所有专用存储库配置为适当的包括模式只指定组织可能需要的工件集。

在这种情况下,对通常在通用存储库中发现的工件的不确定请求将跳过专用存储库,从而提高性能。

设置安全远程和本地存储库的优先级

适用于所有存储库类型(CocoaPods、Git LFS、NuGet V2、Opkg、RPM、Rust、Vagrant和VCS存储库除外)。

您可以通过启用本地和远程存储库的“Priority Resolution”字段来声明本地和远程存储库是“安全的”。在解析虚拟存储库时,设置优先级解析优先于解析顺序。将存储库设置为优先级将导致元数据仅从使用此字段设置的存储库合并。如果在这些存储库中没有找到包,Artifactory将合并未设置Priority Resolution字段的存储库中的元数据。

本地和远程存储库

除了上述设置之外,本地和远程存储库还在特定于类型的部分中为相关包类型共享以下设置。

最大唯一快照

指定应该存储的同一工件的唯一快照的最大数量。一旦达到这个数字并上传新的快照,旧的存储快照将被自动删除。

空白(默认)表示不限制唯一快照的个数。

处理版本
如果设置了,Artifactory允许您将发布工件部署到这个存储库中。
处理快照
如果设置了,Artifactory允许您将快照构件部署到这个存储库中。
版权所有©2022 JFrog Ltd.