代码库概览

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

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

代码库格式

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

仓库模式

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

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

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

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

虚拟仓库

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

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

代码库使用示例

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

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

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

    • 构建可以使用 存储库虚拟仓库通过远程仓库提供依赖项 代码库,这是 Maven Central 的缓存代理。
    • Cloud Build 将软件包上传到标准 Maven 制品库 组件项目中
  2. 在运行时项目中,Cloud Build 将 Java 代码容器化 应用。

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

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

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

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

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

存储库位置

您可以在支持的组织环境中创建一个或多个代码库 <ph type="x-smartling-placeholder"></ph> 单区域或多区域 。合理的存储库位置平衡 延迟、可用性和带宽成本。 您的组织可能还具有特定的法规遵从要求。

位置注意事项

在与其他 Google Cloud 服务相同的区域中创建代码库 具有诸多优势:

  • 通过创建代码库减少延迟和网络出站流量费用 运行 GKE、Cloud Run、 Cloud Build 和与之交互的其他 Google Cloud 服务 代码库以下来源的出站流量是免费的 将 Artifact Registry 迁移到 区域。

    虽然从多区域位置到 相应区域的 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.5 匹配, v2.0alphav10.2
  • Packageprefixes:是一个工件名称前缀列表。您可以输入 在前缀之间按 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

如果您的保留最新版本政策设为保留 3 个版本 与软件包前缀匹配的软件包:{release-xyz}(仅限) 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 组织的政策。有关 相关信息,请参阅标记代码库

后续步骤