在创建代码库时,请考虑创建工件的内部过程和工件消费者的使用情况。
代码库格式
每个代码库都与特定的工件 格式相关联。例如,Docker 代码库存储 Docker 映像。您可以在同一 项目 Google Cloud 中为每种格式创建多个代码库。
代码库模式
代码库模式有多种。每种模式都有不同的用途,因此您在创建代码库后无法更改代码库模式。
标准代码库
标准代码库是用于存储私有工件的常规 Artifact Registry 代码库。您可以使用这些代码库直接上传和下载工件,并使用 Artifact Analysis 扫描漏洞和其他元数据。
如需创建标准代码库,请按照 创建标准代码库中的步骤操作。
远程仓库
远程代码库是只读代码库,充当代理来存储来自以下上游来源的工件:
- 标准 Artifact Registry 代码库。
- 外部来源,例如 Docker Hub、Maven Central、Python 软件包索引 (PyPI)、Debian 或 CentOS。
首次请求工件版本时,代码库会从上游来源下载该版本并缓存其副本。当再次请求同一版本时,远程仓库会提供已缓存的副本。
远程代码库可缩短延迟时间并提高构建和 部署的可用性。 Google Cloud您还可以使用 Artifact Analysis 扫描缓存的软件包,以查找漏洞和其他元数据。
如需详细了解远程代码库,请参阅 远程代码库概览。如需创建远程代码库, 请按照创建远程代码库中的步骤操作。
连接器代码库(预览版)
连接器代码库充当上游来源的代理,同时有助于确保所有请求都由上游来源处理。与远程代码库不同,连接器代码库不会缓存工件。 因此,如果您需要对上游来源进行全面审核,或者必须遵守禁止工件缓存的第三方政策,则连接器代码库非常有用。
如需详细了解连接器代码库,请参阅 连接器代码库概览。如需创建连接器 代码库,请按照创建连接器代码库中的步骤操作。
虚拟代码库
虚拟代码库是只读代码库,充当单个访问点,用于从一个或多个 上游代码库下载、安装或部署相同格式的工件。上游代码库可以是标准代码库、远程代码库或虚拟代码库。
虚拟代码库可简化制品使用者的客户端配置。您还可以通过配置上游 政策来缓解 依赖项混淆攻击,以优先处理包含私有工件的代码库,而不是缓存公共工件的远程 代码库。
如需详细了解虚拟代码库,请参阅 虚拟代码库概览。如需创建虚拟代码库, 请按照创建虚拟代码库中的步骤操作。
代码库使用示例
下图展示了在不同模式下组合使用多个代码库的其中一种可行方案。该图显示了跨两个 Google Cloud 项目的工作流。在开发项目中,开发者构建了一个 Java 应用。在一个单独的运行时项目中,另一个构建会创建一个包含该应用的容器映像,以便部署到 Google Kubernetes Engine。
在开发项目中,Java 开发团队使用 Cloud Build 构建 Java 应用。
- 构建可以使用虚拟代码库请求公共 Java 依赖项。虚拟代码库从远程代码库提供依赖项,远程代码库是 Maven Central 的缓存代理。
- Cloud Build 将软件包上传到组件项目中的标准 Maven 制品库。
在运行时项目中,Cloud Build 将 Java 应用容器化。
构建使用 Maven 虚拟代码库下载应用。虚拟代码库从开发项目中的标准代码库提供软件包。构建还可以从同一虚拟代码库下载公共 Java 依赖项。
在运行时项目中,Cloud Build 将构建的容器映像上传到标准 Docker 代码库。
GKE 从 Docker 虚拟代码库拉取映像。
- 上游标准 Docker 代码库提供私有映像,例如容器化的 Java 应用。
- 上行远程仓库提供 GKE 从 Docker Hub 请求的映像。
在此示例中,所有代码库、构建和 GKE 集群都位于同一区域。为 Google Cloud 服务 使用同一位置具有一些优势,如代码库位置中所述。
代码库位置
您可以在受支持的 区域或多区域位置中创建一个或多个代码库。良好的代码库位置可以让数据使用者在延迟时间、可用性和带宽费用之间取得平衡。 您的组织可能还有特定的合规性要求。位置注意事项
本部分介绍了您可能希望在与服务相同的 区域中创建代码库的原因。 Google Cloud
您可以在运行 GKE、Cloud Run、Cloud Build 和与代码库交互的其他服务的同一区域中创建代码库,以缩短延迟时间并降低 网络出站流量费用。 Google Cloud 从 Artifact Registry 到同一 区域中的其他 Google Cloud 服务的出站流量不会产生费用。
虽然从多区域位置到相应区域中的 Google Cloud 服务的出站流量不会产生费用,但此定价仅 适用于有限的一组区域。
- 对于
us多区域位置,到美国境内区域(例如us-central)的出站流量不会产生费用,但到加拿大或南美洲境内任何区域的出站流量会产生 费用。 - 对于
asia多区域位置,到亚洲境内区域(例如asia-northeast1)的出站流量不会产生费用,但到澳大利亚境内区域的出站流量会 产生费用。
请考虑外部消费者的位置 Google Cloud。例如,如果澳大利亚的开发者团队需要将工件从 Artifact Registry 下载到其本地工作站,则位于澳大利亚境内区域的代码库将缩短延迟时间,并产生比位于其他大洲的代码库更低的出站流量费用。
限制代码库位置
如果您需要遵守要求您将数据存储在特定区域的法规或政策,则可以在组织政策中添加资源位置限制条件,该限制条件仅允许在符合要求的区域中创建代码库。 Google CloudArtifact Registry 仅在您将限制条件添加到组织政策后才会强制执行该限制条件。如果您在不符合要求的区域中已有代码库,则必须自行将工件移至符合要求的区域中的代码库,然后删除不符合要求的代码库。
清理政策
Artifact Registry 清理政策定义了自动删除您不再需要的工件版本或保留您希望无限期存储的工件的标准。
如果您存储了许多版本的工件,但只需要保留您发布到生产环境的特定版本,则清理政策非常有用。您可以定义 删除政策,其中包含用于删除工件的标准,以及 保留政策,其中包含用于保留工件的标准。
如果工件版本同时符合删除政策和保留政策中的标准,则 Artifact Registry 会应用保留政策。
使用删除政策
删除政策会删除符合以下必需标准的工件:
标记状态:指示政策是否应检查带标记的工件或 未标记的工件。在将映像推送到代码库或从代码库拉取映像时,工件会被标记。如需详细了解 Docker 标记,请参阅容器概念。
- 任何标记状态:忽略标记状态,适用于带标记的工件和 未标记的工件。
- 已标记:仅适用于带标记的工件。
- 未标记:仅适用于未标记的工件。
不支持标记的格式会被视为
untagged。无法删除启用了不可变标记的代码库中带标记的工件。如需详细了解适用于清理政策的标记状态,请参阅 TagState 参考文档。
您可以使用以下任一设置来配置删除政策:
- 标记前缀:是逗号分隔列表,其中包含标记前缀。例如,前缀
test和staging将与带有标记testenv和staging-1.5的映像匹配。必须将tagState设置为TAGGED才能使用标记前缀。- 版本前缀:是工件版本的逗号分隔列表。例如,
v1、v2将与版本v1.5、v2.0alpha和v10.2匹配。
- 版本前缀:是工件版本的逗号分隔列表。例如,
- 软件包前缀:是工件名称前缀的列表。您可以在前缀之间按
Enter或,输入多个前缀。 例如,red, blue将创建两个前缀red和blue,并 与工件名称red-team、redis、 和bluebird匹配。 - 早于:是自
工件版本上传到代码库以来的最短时间,以时长表示。
例如,
30d表示 30 天。您可以通过分别添加s、m、h或d来指定秒、 分钟、小时或天的时长。 - 晚于:是自
工件版本上传到代码库以来的最长时间,以时长表示。
例如,
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-v1 和 release-xyz-v2。
由删除政策触发的删除操作会计入每个项目的 Artifact Registry 删除请求配额。
如需创建清理政策并将其应用于代码库,请参阅 配置清理政策。
gcr.io 网域支持
Artifact Registry 支持在 gcr.io 网域上托管映像。如果您要从 Container Registry 迁移到 Artifact Registry,则可以设置 gcr.io 代码库 Artifact Registry,以最大限度地减少对现有自动化和工作流的更改。这些代码库提供:
- 将请求重定向到
gcr.io网域。 - 在第一个映像推送到 gcr.io 主机名时创建 gcr.io 代码库,以与 Container Registry 行为保持兼容。
如需了解详情,请参阅 迁移到具有 gcr.io 网域支持的代码库
项目结构
您的资源层次结构是您在各个项目中整理资源的方式 。 Google Cloud 您选择的结构取决于数据治理要求、信任边界和团队结构等因素。在多项目组织中设置代码库有两种一般方法。
- 集中管理代码库
在单个项目中创建所有代码库,然后在代码库级层向其他项目中的正文授予访问权限。如果由一个人或一个团队负责管理整个组织的代码库管理和代码库访问权限,则此方法可能更有效。
由于您只需启用和管理 Artifact Registry 的单个实例,因此它还可以简化虚拟代码库的设置。
- 项目专属代码库
在存储和下载工件的项目中创建代码库。如果您有数据治理政策或信任边界,需要更精细的项目级资源分离和控制,则可能需要使用此方法。
访问权限控制
除非您将代码库配置为允许公开访问,否则只有具有适当权限的用户才能访问代码库。您可以在项目或代码库级层授予权限。
某些 Google Cloud 服务使用默认服务账号 ,这些账号对同一 Google Cloud 项目中的代码库具有默认权限。 但是,这些默认设置可能不适合您的软件开发流程,或者可能不符合组织中的安全或政策要求。如果出现以下情况,您的代码库管理员必须明确授予这些服务对代码库的访问权限:
- Artifact Registry 与与之交互的服务位于不同的项目中。
- 您使用的是自定义 IAM 角色,而不是预定义角色。
- 您没有为 Google Cloud 服务 使用默认服务帐号。
- 您正在设置虚拟代码库。您必须明确授予 Artifact Registry 服务帐号对上游代码库的访问权限。
对于需要访问代码库的其他正文,您的代码库管理员必须授予访问权限。遵循最小权限安全原则,授予所需的最低权限。例如:
- 您将 Artifact Registry 中的容器映像部署到多个不同项目中的 GKE 集群。这些集群中节点的服务帐号只需要对代码库具有读取权限。
- 您有一个用于开发中的应用的开发代码库,以及一个用于已发布的应用的生产代码库。 开发者需要对开发代码库具有读取和写入权限,对生产代码库具有只读权限。
- 您有一个包含示例应用的演示代码库。您的销售团队只需要具有只读权限即可下载演示。
限制工件下载
您可以使用下载规则限制工件下载。 借助下载规则,您可以允许或拒绝从代码库和软件包下载工件。您还可以设置条件,以便规则适用于特定标记或版本。
如需详细了解下载规则的工作原理,请参阅控制访问权限和保护工件概览 的限制工件下载部分。
数据加密
默认情况下,会自动使用由 Google Cloud 提供支持的 Google 拥有和管理的加密密钥加密静态数据。Google Cloud 如果您有与保护数据的密钥相关的特定合规性或监管 要求,则可以创建使用客户管理的加密密钥 (CMEK) 加密的代码库。Artifact Registry 还支持 组织政策限制条件 ,这些限制条件可以要求 CMEK 保护资源。
标签和标记
标签提供了一种整理特定于 Google Cloud 服务的资源的方式。在 Artifact Registry 中,您可以向代码库添加标签,以便将它们分组在一起或按标签过滤代码库列表。例如,您可以按开发阶段或团队对代码库进行分组,以实现自动化或结算。如需详细了解如何创建和使用 代码库标签,请参阅为代码库添加标签。
您还可以将 标记应用于代码库。虽然标签主要用于 整理和过滤特定于服务的资源,但标记用于以编程方式 控制整个 Google Cloud 组织的政策。如需了解更多 信息,请参阅为代码库添加标记。