代码库概览

借助 Artifact Registry,您可以存储不同的工件类型 在单个项目中创建多个仓库,并将特定的 单区域或多区域 每个仓库本页面介绍了可帮助您规划代码库位置和组织的注意事项。

在创建代码库时,请考虑创建工件的内部过程和工件消费者的使用情况。

代码库格式

每个代码库都与特定工件相关联 format 设置的值。例如,Docker 代码库 存储 Docker 映像您可以在同一 Google Cloud 项目中为每种格式创建多个代码库。

代码库模式

代码库模式有多种。每种模式都有不同的用途, 代码库一经创建,便无法更改代码库模式。

标准仓库
标准代码库是 Cloud Storage 的常规 Artifact Registry 代码库, 私有工件您可以使用 并使用 Artifact Analysis 扫描漏洞 和其他元数据。
远程仓库

一个只读仓库,可用作代理来存储来自预设外部来源(例如 Docker Hub、Maven Central、Python 软件包索引 [PyPI]、Debian 或 CentOS)的工件,以及支持的格式的用户定义来源。当您首次请求工件版本时,代码库会从外部来源下载该版本并缓存其副本。当再次请求同一版本时,代码库会提供缓存的副本。

远程代码库可缩短 Google Cloud 上 build 和部署的延迟时间,并提高其可用性。您还可以使用 使用 Artifact Analysis 来扫描缓存的软件包是否存在漏洞 其他元数据

虚拟代码库

一个只读存储库,充当下载节点的单一访问点; 通过一个或多个网站提供的相同格式 上游仓库。上游代码库可以是标准代码库、远程代码库或虚拟代码库。

虚拟代码库可简化您的服务账号的使用方的客户端配置 工件你还可以 依赖项混淆攻击 用于优先考虑包含私有制品的仓库,而非远程仓库 用于缓存公共制品的代码库

代码库使用示例

下图展示了您可以将不同模式的代码库搭配使用的方式之一。此图显示了涉及两个操作系统的 Google Cloud 项目。在开发项目中,开发者构建 Java 应用。在单独的运行时项目中,另一个构建会创建一个容器 应用映像,以部署到 Google Kubernetes Engine。

跨两个项目使用的标准代码库、虚拟代码库和远程代码库。

  1. 在开发项目中,Java 开发团队使用 使用 Cloud Build 构建 Java 应用。

    • 该 build 可以使用虚拟仓库请求公共 Java 依赖项。虚拟制品库会从远程制品库(即 Maven Central 的缓存代理)提供依赖项。
    • Cloud Build 将软件包上传到标准 Maven 制品库 组件项目中
  2. 在运行时项目中,Cloud Build 将 Java 容器化 应用。

    该 build 使用 Maven 虚拟制品库下载应用。通过 虚拟仓库通过 开发项目。构建版本还可以下载 多个依赖项

  3. 在运行时项目中,Cloud Build 上传构建的容器 复制到标准 Docker 代码库

  4. GKE 从 Docker 虚拟代码库拉取映像。

    • 上游标准 Docker 代码库提供私有映像,例如 容器化的 Java 应用
    • 上游远程代码库提供 GKE 从 Docker Hub 请求的映像。

在此示例中,所有代码库、build 和 GKE 集群 同一区域为 Google Cloud 服务使用同一位置 具有代码库位置中描述的优势。

存储库位置

您可以在支持的 单区域或多区域 。良好的代码库位置可以让数据使用者在延迟时间、可用性和带宽费用之间取得平衡。您的组织可能还有特定的合规性要求。

位置注意事项

在其他 Google Cloud 服务所在的区域中创建代码库 具有许多优势:

  • 在运行 GKE、Cloud Run、Cloud Build 以及与代码库交互的其他 Google Cloud 服务的同一区域中创建代码库,可缩短延迟时间并降低网络出站流量费用。从 Artifact Registry 到同一区域内其他 Google Cloud 服务的出站流量不收费。

    虽然从多区域位置到 相应区域的 Google Cloud 服务,仅此价格 仅适用于部分区域。

    • 对于 us 多区域,出站流量到美国的某个区域,例如 对于加拿大或南美的任何区域,无需支付 us-central
    • 对于 asia 多区域,您无需为出站流量到亚洲地区(例如 asia-northeast1)支付费用,但需要为出站流量到澳大利亚地区支付费用。
  • 您只能在 GKE 中使用映像流式传输 和 Dataproc 无服务器 (如果您的容器映像存储在 Artifact Registry 中) 位于同一区域,或者创建一个多区域 与您的工作负载所属的区域相对应。当您使用较大的容器映像时,映像流式传输可以显著缩短工作负载初始化时间,因为工作负载可以在整个映像下载完毕之前启动。

  • 考虑 Google Cloud 外部使用方的地理位置。对于 例如,如果澳大利亚的开发者团队需要下载工件 从 Artifact Registry 转移到本地工作站 将缩短延迟时间并产生较低的出站流量费用 与位于另一个大洲的代码库相比

限制代码库位置

如果您需要遵守要求您将数据存储在特定区域的法规或政策,则可以在 Google Cloud 组织政策中添加资源位置限制,以便仅允许在合规区域创建代码库。Artifact Registry 仅在您将限制条件添加到组织政策中后才会强制执行该限制条件。如果您在 不合规的位置,您必须将工件移至 然后删除不合规的代码库。

清理政策

Artifact Registry 清理政策用于定义自动删除不再需要的工件版本或保留您希望无限期存储的工件的条件。

如果您存储了许多工件版本,但只需要保留发布到生产环境的特定版本,清理政策会很有用。您 可以定义删除政策,其中包含用于删除制品的条件 使用保留工件的标准保留政策

如果工件版本同时符合删除政策和保留政策中的条件,Artifact Registry 会应用保留政策。

删除政策

删除政策会删除符合以下必要条件的制品:

  • 标记状态:指明政策是否应检查被标记的制品或 未标记工件。将映像推送到或从代码库中拉取映像时,系统会为工件添加标记。如需详细了解 Docker 标记,请参阅容器概念

    • 任何标记状态:忽略标记状态,并同时应用于带标记和不带标记的工件。
    • 已标记:仅适用于已标记的工件。
    • 未添加标记:仅适用于未添加标记的工件。

    不支持标记的格式会被视为 untagged。已添加标记的工件 无法删除启用了不可变标记的代码库中。

    如需详细了解与清理政策相关的代码状态,请参阅 TagState 参考文档

以下是定义删除政策的可选方法:

  • 标记前缀:一系列以英文逗号分隔的 标记前缀。例如,前缀 teststaging 将匹配 带有 testenvstaging-1.5 标记的图片。必须将 tagState 设置为 TAGGED,才能使用代码前缀。
    • 版本前缀:- 以英文逗号分隔的工件版本列表 前缀。例如,v1v2 将与版本 v1.5v2.0alphav10.2 匹配。
  • 软件包前缀:工件名称前缀列表。您可以在前缀之间按 Enter, 输入多个前缀。例如,red, blue 将创建两个前缀:redblue, 将匹配制品名称:red-teamredis、 和 bluebird
  • 早于:是自事件 工件版本已上传到代码库,并以时长的形式指定。 例如,30d 为 30 天。您可以通过分别附加 smhd 来指定秒、分钟、小时或天时长。
  • 晚于:指的是自 工件版本已上传到代码库,并以时长的形式指定。 例如,30d 为 30 天。

保留政策

保留政策会保留与删除政策相同条件的工件,或保留一定数量的最新版本。

例如,假设有一个包含以下工件的代码库:

IMAGE: us-west1-docker.pkg.dev/my-project/release-xyz-v1
DIGEST: sha256:1b0a26bd07a3d17473d8d8468bea84015e27f87124b2831234581bce13f61370
TAGS:
CREATE_TIME: 2023-06-19T18:59:09
UPDATE_TIME: 2023-06-19T18:59:10

IMAGE: us-west1-docker.pkg.dev/my-project/release-xyz-v2
DIGEST: sha256:6e494387c901caf429c1bf77bd92fb82b33a68c0e19f123456a3ac8d27a7049d
TAGS: latest
CREATE_TIME: 2023-06-19T18:59:09
UPDATE_TIME: 2023-06-19T18:59:09

IMAGE: us-west1-docker.pkg.dev/my-project/release-v2
DIGEST: sha256:6e494387c901caf429c1bf77bd92fb82b33a68c0e19f123456a3ac8d27a7049d
TAGS: latest
CREATE_TIME: 2023-06-19T18:59:09
UPDATE_TIME: 2023-06-19T18:59:09

如果您的保留最新版本政策设置为保留与软件包前缀 {release-xyz} 匹配的 3 个版本的软件包,则系统只会保留 release-xyz-v1release-xyz-v2

由删除政策触发的删除操作会计入您的 Artifact Registry 每个项目的删除请求配额

如需创建清理政策并将其应用于代码库,请参阅 配置清理政策

gcr.io 网域支持

Artifact Registry 支持在 gcr.io 网域上托管映像。如果您 从 Container Registry 转移到 Artifact Registry 时 gcr.io 代码库 Artifact Registry,以最大限度地减少对现有资源的更改 自动化和工作流。这些代码库提供:

  • 将请求重定向到 gcr.io 网域。
  • 在将第一个映像推送到 gcr.io 时,创建 gcr.io 代码库 主机名。

如需了解详情,请参阅 转换为具有 gcr.io 网域支持的代码库

项目结构

资源层次结构是您在 Google Cloud 项目中整理资源的方式。您选择的结构取决于 数据治理要求、信任边界和团队等因素 结构。

在 多项目组织。

集中管理代码库
在单个项目中创建所有代码库,然后在代码库级别向其他项目中的主体授予访问权限。如果单个人或团队负责整个组织的代码库管理和代码库访问,这种方法会更有效。
还可以简化虚拟代码库或 Software Delivery Shield,因为您只需启用和管理单个实例 对 Artifact Registry 的运用
项目专用的代码库
在项目中创建用于存储和下载工件的代码库。如果您有需要在项目级别进行更多分离和资源控制的数据治理政策或信任边界,则可能需要采用这种方法。

访问权限控制

除非 为代码库配置公共访问权限。您可以在项目或代码库级层授予权限。

某些 Google Cloud 服务使用默认服务账号 对同一 Google Cloud 项目中的代码库具有默认权限。 但是,这些默认设置可能不适合您的软件 开发流程或不符合安全或政策要求 组织中。如果满足以下条件,您的代码库管理员必须明确向这些服务授予对代码库的访问权限:

  • Artifact Registry 与与其交互的服务位于不同的项目中。
  • 您正在使用默认服务使用自定义 IAM 角色 而不是预定义角色
  • 您没有使用 Google Cloud 的默认服务账号 服务。
  • 您正在设置虚拟代码库。您必须明确授予 Artifact Registry 服务账号对上游的访问权限 代码库

对于需要访问代码库的其他主体,您的代码库管理员必须授予访问权限。遵循最小权限安全原则,授予最低所需权限。例如:

  • 您将 Artifact Registry 中的容器映像部署到 GKE 多个不同项目中的集群。节点的服务账号 这些集群中的对象仅需要代码库的读取权限。
  • 您可以创建一个开发代码库来存放正在开发的应用,并创建一个生产代码库来存放已发布的应用。开发者需要对开发代码库拥有读写权限, 拥有对生产代码库的只读权限。
  • 您有一个包含示例应用的演示版代码库。仅限销售团队 需要拥有只读权限来下载演示。

限制制品下载

您可以使用下载规则限制工件下载。 借助下载规则,您可以允许或禁止从代码库和软件包下载工件。您还可以设置条件,以便将规则应用于特定代码或版本。

如需详细了解下载规则的运作方式,请参阅限制工件下载 “控制访问权限和保护工件概览”部分。

数据加密

默认情况下,Google Cloud 会自动加密 使用 Google 拥有的密钥和 Google 管理的密钥。如果您满足特定合规或监管要求 与保护数据的密钥相关的要求,则可以创建 使用客户管理的加密密钥 (CMEK) 加密的存储库。

Artifact Registry 还支持可以要求使用 CMEK 保护资源的组织政策限制条件

标签和标记

标签提供了一种整理特定于 Google Cloud 服务的资源的方法。在 Artifact Registry 中,您可以向代码库添加标签, 可以将它们归为一组,或按标签过滤代码库列表。例如,您可以使用标签按开发阶段或团队对代码库进行分组,以实现自动化或结算目的。如需详细了解如何创建和使用代码库标签,请参阅为代码库添加标签

您还可以将标记应用于代码库。虽然标签主要用于 用于整理和过滤服务专属资源,代码用于程序化 控制整个 Google Cloud 组织的政策。如需了解详情,请参阅为代码库添加标记

后续步骤