本文档简要介绍了虚拟代码库。如需了解如何创建虚拟代码库,请参阅创建虚拟代码库。
Artifact Registry 配额和限制适用于虚拟代码库。
虚拟仓库的工作原理
虚拟代码库充当单个访问点,用于从一个或多个上游代码库下载、安装或部署相同格式的制品。上游制品库可以是 Artifact Registry 标准制品库或远程制品库。
其他代码库模式包括:
- 标准:默认的代码库模式。您可以将私有软件包等制品直接上传或发布到标准代码库。 虽然您可以直接从各个标准代码库下载,但通过虚拟代码库访问代码库组可简化工具配置。
- 远程(仅限语言软件包代码库):用于缓存 Maven Central 或 PyPI 等公共代码库中的制品的拉取透传缓存。它充当公共代码库的代理,以便您更好地控制外部依赖项。
使用场景和优势
- 更简单的客户端配置
对于只需要读取代码库的任务,您只需配置一个 Artifact Registry 代码库,即可访问存储在多个上游代码库中的制品。
例如:
- Maven 软件包的虚拟代码库可以提供来自 Artifact Registry 标准代码库的私有 Java 软件包,以及来自远程代码库的公共 Java 软件包,该远程代码库会缓存来自 Maven Central 的公共软件包。
- 虚拟代码库可以提供由不同团队拥有的多个上游标准代码库中的私有 Python 软件包。每个团队都拥有对其上游代码库的写入权限,但会使用虚拟代码库从其他团队下载软件包。
- 更安全的依赖项解析
您可以为上游代码库分配优先级,以便更好地控制在请求的制品位于多个上游代码库中时,Artifact Registry 选择哪个代码库。
某些工具(例如 Python
pip
工具)在客户端中同时配置了私有代码库和公共代码库时,无法控制搜索顺序。此类配置容易受到依赖项混淆攻击,即有人将包含恶意代码的软件包的新版本上传到公共代码库,以诱骗客户端选择恶意版本。您可以同时使用远程代码库和虚拟代码库来缓解此风险:
- 创建远程代码库作为公共代码库的代理。
- 为您的私有软件包创建标准代码库。
- 创建一个虚拟代码库,该代码库配置为在两个代码库中都存在同一软件包的版本时,优先使用您的标准代码库。
- 配置软件包管理器和其他工具,使其仅从虚拟代码库读取,这样客户端逻辑就不会参与代码库选择。
如需了解其他依赖项管理最佳实践,请参阅依赖项管理。
虚拟代码库如何选择上游代码库
每个上游代码库都必须配置优先级。优先级是一个整数,充当权重,而不是排名。这意味着,优先级值较高的代码库优先于优先级值较低的代码库。
当您请求多个上游代码库中的制品时,Artifact Registry 会使用以下优先级逻辑:
- 系统会优先考虑值最高的代码库。例如,值
10
被视为比值1
的优先级更高。 - 如果多个上游代码库具有相同的优先级,则可以从其中任何一个代码库提供相应制品。
当您直接配置客户端以搜索虚拟代码库和其他代码库时,客户端可能仍会从 Artifact Registry 之外的代码库下载制品。
例如,如果您将 Python pip
工具配置为搜索 PyPI 和虚拟代码库,则您的软件包可能会直接从 PyPI 下载,因为 pip
始终会选择软件包的最新版本,无论该版本来自哪个代码库。如果 pip
配置为仅搜索虚拟代码库,则您可以控制所有上游代码库(包括充当 PyPI 代理的上游远程代码库)的优先级。
支持的代码库格式
您可以为以下 Artifact Registry 制品库格式创建虚拟制品库:
语言包:
操作系统软件包:
如果您是 Artifact Registry 的新手,可以按照快速入门指南了解如何为这些格式设置标准代码库。
限制
除了 Artifact Registry 配额和限制之外,虚拟代码库还存在以下限制:
- 标准 Artifact Registry 上游代码库必须与虚拟代码库位于同一区域或多区域,但可以位于不同的 Google Cloud 项目中。
Maven 虚拟仓库不允许将版本政策设置为 snapshot 或 release。
Apt 和 Yum 上游必须是 Artifact Registry 标准制品库。
在导入、上传或删除软件包后,Apt 和 Yum 标准代码库会异步更新软件包索引。对于小型代码库,重新生成索引可能需要几秒钟。对于较大的代码库,重新编制索引可能需要几分钟或更长时间。重新编制索引完成后,Apt 和 Yum 客户端会看到对相应代码库的更改。