创建远程代码库

本页面介绍如何创建 Artifact Registry 远程代码库。

远程代码库存储来自以下上游来源的制品:

  • 标准 Artifact Registry 制品库。
  • 外部来源,例如:
    • CentOS
    • Debian
    • Docker Hub
    • GitHub Container Registry (ghcr.io)
    • Maven Central
    • Python 软件包索引 (PyPI)

远程代码库充当上游来源的代理,以便您更好地控制依赖项。首次请求软件包的某个版本时,Artifact Registry 会下载该软件包并将其缓存到远程代码库中。下次您请求同一软件包版本时,Artifact Registry 会提供缓存的副本。

如果您从不存在或不包含您指定版本的上游来源请求制品,则请求将失败。

其他代码库模式包括:

  • 标准:默认的代码库模式。您可以将私有软件包等制品直接上传或发布到标准代码库。 虽然您可以直接从各个标准代码库下载,但通过虚拟代码库访问代码库组可简化工具配置。
  • 虚拟:充当多个上游代码库(包括远程代码库和标准代码库)的单一访问点。

如需详细了解远程代码库的工作原理,请参阅远程代码库概览

准备工作

  1. 启用 Artifact Registry,包括启用 Artifact Registry API 和安装 Google Cloud CLI。
  2. 可选:为 gcloud CLI 命令配置默认值
  3. 如果您需要使用客户管理的加密密钥 (CMEK) 来加密代码库内容,请在 Cloud KMS 中为代码库创建并启用密钥。
  4. 如果您想向上游代码库进行身份验证,请启用 Secret Manager API。

    gcloud services enable secretmanager.googleapis.com \
        --project=PROJECT_ID
    
  5. 如果 Artifact Registry 位于 VPC Service Controls 服务边界内,请启用 Access Context Manager API(如果尚未启用)。

    gcloud services enable accesscontextmanager.googleapis.com \
        --project=PROJECT_ID
    
  6. 如果您想将 Artifact Registry 代码库设置为上游,但它与您的远程代码库位于不同的项目中,那么您需要在创建远程代码库之前,向远程代码库项目的服务账号授予对上游代码库项目的访问权限。

    授予服务代理角色

    远程仓库使用 Artifact Registry 服务代理向 Artifact Registry 上游仓库进行身份验证。您必须向远程代码库服务代理授予对上游代码库的读取权限。

    如需向上游代码库中的远程代码库服务代理授予 Artifact Registry Service Agent 角色,请运行以下命令:

    
      gcloud projects add-iam-policy-binding UPSTREAM_REPOSITORY \
          --member serviceAccount:service-REMOTE_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
          --location=REGION \
          --project=UPSTREAM_PROJECT_ID \
          --role roles/artifactregistry.serviceAgent
      

    请替换以下内容:

    • UPSTREAM_REPOSITORY 是上游代码库的 ID。 Artifact Registry 上游代码库必须是标准模式代码库。
    • REMOTE_PROJECT_NUMBER 是远程代码库的 Google Cloud 项目的项目编号
    • REMOTE_PROJECT_ID 是远程代码库的 Google Cloud项目的 ID。
    • REGION 是您要创建远程仓库的区域。
    • UPSTREAM_PROJECT_ID 是具有上游代码库的 Google Cloud项目的 ID。

所需的角色

如需获得管理代码库所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 创建远程制品库并授予对各个制品库的访问权限: 项目的 Artifact Registry Admin (roles/artifactregistry.admin)
  • 将上游代码库凭据保存在 Secret 版本中: 项目的 Secret Manager Admin (roles/secretmanager.admin)
  • 授予对 VPC Service Controls 服务边界之外的上游来源的访问权限: 应用访问权限政策的项目、文件夹或组织的 Access Context Manager Editor (roles/accesscontextmanager.policyEditor)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建远程代码库

创建远程代码库时,您必须配置以下设置,这些设置在代码库创建后无法更改:

  • 制品格式
  • 代码库模式设置为远程。
  • 远程代码库的上游来源。
  • 代码库位置
  • 使用 Google-owned and Google-managed encryption keys 或客户管理的加密密钥进行加密。Artifact Registry 默认使用Google-owned and Google-managed encryption keys 。

Artifact Registry 会强制执行组织政策限制,这些限制要求使用 CMEK 加密资源或限制可用于 CMEK 保护的 Cloud KMS 密钥。

控制台

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

  2. 点击创建代码库

  3. 指定代码库名称。对于项目中的每个代码库位置,代码库名称不得重复。

  4. 格式部分,选择代码库格式。

  5. 代码库模式部分中,选择远程

  6. 远程代码库来源部分,选择以下方式之一来输入上游代码库网址:

    • 为您的格式类型选择列出的预设上游来源。
    • 选择自定义,以指定指向公共或私有代码库的完整网址(适用于支持的格式)。
    • 选择 Artifact Registry 代码库以选择标准 Artifact Registry 代码库。
  7. 如果您选择了自定义,请在自定义代码库字段中输入完整的代码库网址。创建代码库后,网址便无法更改。

    如需查看一些常见的上游网址示例,请参阅自定义上游

  8. 如果您选择了 Artifact Registry 代码库

    1. Artifact Registry 代码库字段中,输入要用作上游的代码库的完整名称,或点击浏览以查看您有权查看的代码库列表。系统只会列出与您的远程代码库格式相同的代码库。
    2. 点击要用作上游的代码库的名称。
    3. 点击选择
  9. 如果您选择了某个预设的上游,或使用自定义按钮输入了完整网址,请在远程代码库身份验证模式中选择以下选项之一:

    • 已通过身份验证:输入您的用户名和密钥,以便向上游代码库进行身份验证。
    • 未通过身份验证:跳过对上游仓库的身份验证。
  10. 如果您选择了已验证,请输入以下信息:

    • 用户名字段中,输入上游代码库的用户名。
    • Secret 字段中,输入您在其中保存了上游代码库密码的 Secret 版本。

    您可以在创建代码库后修改这些值。如需详细了解如何对远程代码库上游进行身份验证,请参阅配置对远程代码库上游的身份验证

  11. 位置类型部分中,选择代码库的位置:

    1. 选择位置类型:区域或多区域。位置列表会更改以反映您的选择。

    2. 区域多区域列表中,选择一个位置。

    如需了解位置类型和支持的位置,请参阅代码库位置

  12. 为代码库添加说明。说明有助于确定代码库的用途及其包含的制品类型。

    请勿包含敏感数据,因为代码库说明未加密。

  13. 如果您想使用标签来整理代码库,请点击添加标签,然后输入标签的键值对。您可以在创建代码库后添加、修改或移除标签。

  14. 加密部分中,选择代码库的加密机制。

    • Google-managed encryption key - 使用 Google-owned and Google-managed encryption key加密代码库内容。
    • 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK
  15. 如果您想使用清理政策删除未使用的制品,请在清理政策部分执行以下操作:

    1. 选择试运行以在应用政策之前对其进行测试。
    2. 点击添加政策,为您的代码库添加保留或删除政策。
    3. 名称字段中,为清理政策指定一个描述性名称。
    4. 政策类型部分中,选择以下选项之一:

      • 按条件删除:根据您定义的条件删除制品。
      • 有条件保留:根据您定义的条件保留制品。
      • 保留最新版本:为每个软件包保留指定数量的最新版本。

      如需详细了解清理政策,请参阅配置清理政策

  16. Artifact Analysis 部分中,选择漏洞扫描设置:

    • 已启用 - 允许在此代码库中进行扫描。必须在您的项目中启用 Container Scanning API。

      当您启用 Container Scanning API 后,系统会立即开始计费。在项目上启用 Container Scanning API 后,所有新旧代码库都会启用漏洞扫描功能。当您将映像推送到 Artifact Registry 时,Artifact Analysis 会自动对其进行扫描。

    • 已停用 - 防止在此代码库中进行扫描。如果您的项目已启用 Container Scanning API,则系统会继续扫描其他代码库,但会排除此代码库。

      如需详细了解漏洞扫描选项,请参阅启用和停用自动扫描

  17. 点击创建

Artifact Registry 会创建代码库并将其添加到代码库列表中。

gcloud CLI

如需创建代码库,请针对相应的代码库格式运行命令:

Docker

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=docker \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-docker-repo=UPSTREAM

用于向上游仓库进行身份验证的可选标志:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION,并附上有关代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。
  • REMOTE-REPOSITORY-DESCRIPTION 替换为此远程代码库的外部代码库配置说明。
  • USERNAME(可选)如果您使用身份验证,则使用您的用户名对上游代码库进行身份验证。
  • SECRET_VERSION(可选)如果您使用身份验证,请使用包含上游代码库密码的 Secret 版本。
  • UPSTREAM 替换为预设的上游名称、Artifact Registry 代码库路径或用户定义的上游代码库网址。

    对于 Artifact Registry 上游代码库,请将代码库路径的格式设置为类似于以下格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如需了解可用的预设上游和支持的用户自定义上游,请参阅支持的格式

  • --disable-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为停用自动漏洞扫描。

  • --allow-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为允许自动漏洞扫描。如需了解详情,请参阅启用或停用自动扫描

例如,以下命令会在项目 Google Cloud my-projectus-east1 区域中创建一个名为 my-repo 的远程代码库,并且可以使用用户名 my-username 和 Secret 版本 projects/my-project/secrets/my-secret/versions/1 向上游代码库进行身份验证。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=docker \
    --location=us-east1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-docker-repo=DOCKER-HUB

如需详细了解如何对 Docker Hub 上游代码库进行身份验证,请参阅配置对 Docker Hub 的远程代码库身份验证

Maven

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=maven \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-mvn-repo=UPSTREAM

用于向上游仓库进行身份验证的可选标志:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION,并附上有关代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。
  • REMOTE-REPOSITORY-DESCRIPTION 替换为此远程代码库的外部代码库配置说明。
  • USERNAME(可选)如果您使用身份验证,则使用您的用户名对上游代码库进行身份验证。
  • SECRET_VERSION(可选)如果您使用身份验证,请使用包含上游代码库密码的 Secret 版本。
  • UPSTREAM 替换为预设的上游名称、Artifact Registry 代码库路径或用户定义的上游代码库网址。

    对于 Artifact Registry 上游代码库,请将代码库路径的格式设置为类似于以下格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如需了解可用的预设上游和支持的用户自定义上游,请参阅支持的格式

  • --disable-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为停用自动漏洞扫描。

  • --allow-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为允许自动漏洞扫描。如需了解详情,请参阅启用或停用自动扫描

例如,以下命令会在项目 Google Cloud my-projectus-east1 区域中创建一个名为 my-repo 的远程代码库,并且可以使用用户名 my-username 和 Secret 版本 projects/my-project/secrets/my-secret/versions/1 向上游代码库进行身份验证。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=maven \
    --location=us-east1 \
    --description="Remote Maven repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-mvn-repo=MAVEN-CENTRAL

npm

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=npm \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-npm-repo=UPSTREAM

用于向上游仓库进行身份验证的可选标志:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION,并附上有关代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。
  • REMOTE-REPOSITORY-DESCRIPTION 替换为此远程代码库的外部代码库配置说明。
  • USERNAME(可选)如果您使用身份验证,则使用您的用户名对上游代码库进行身份验证。
  • SECRET_VERSION(可选)如果您使用身份验证,请使用包含上游代码库密码的 Secret 版本。
  • UPSTREAM 替换为预设的上游名称、Artifact Registry 代码库路径或用户定义的上游代码库网址。

    对于 Artifact Registry 上游代码库,请将代码库路径的格式设置为类似于以下格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如需了解可用的预设上游和支持的用户自定义上游,请参阅支持的格式

  • --disable-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为停用自动漏洞扫描。

  • --allow-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为允许自动漏洞扫描。如需了解详情,请参阅启用或停用自动扫描

例如,以下命令会在项目 Google Cloud my-projectus-east1 区域中创建一个名为 my-repo 的远程代码库,并且可以使用用户名 my-username 和 Secret 版本 projects/my-project/secrets/my-secret/versions/1 向上游代码库进行身份验证。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=npm \
    --location=us-east1 \
    --description="Remote npm repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Public npm registry" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-npm-repo=NPMJS

Python

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=python \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --disable-vulnerability-scanning \
    --remote-python-repo=UPSTREAM

用于向上游仓库进行身份验证的可选标志:

  • --remote-username=USERNAME
  • --remote-password-secret-version=SECRET_VERSION

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION,并附上有关代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。
  • REMOTE-REPOSITORY-DESCRIPTION 替换为此远程代码库的外部代码库配置说明。
  • USERNAME(可选)如果您使用身份验证,则使用您的用户名对上游代码库进行身份验证。
  • SECRET_VERSION(可选)如果您使用身份验证,请使用包含上游代码库密码的 Secret 版本。
  • UPSTREAM 替换为预设的上游名称、Artifact Registry 代码库路径或用户定义的上游代码库网址。

    对于 Artifact Registry 上游代码库,请将代码库路径的格式设置为类似于以下格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY

    如需了解可用的预设上游和支持的用户自定义上游,请参阅支持的格式

  • --disable-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为停用自动漏洞扫描。

  • --allow-vulnerability-scanning:是一个可选标志,用于将您的代码库配置为允许自动漏洞扫描。如需了解详情,请参阅启用或停用自动扫描

例如,以下命令会在项目 Google Cloud my-projectus-east1 区域中创建一个名为 my-repo 的远程代码库,并且可以使用用户名 my-username 和 Secret 版本 projects/my-project/secrets/my-secret/versions/1 向上游代码库进行身份验证。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=python \
    --location=us-east1 \
    --description="Remote Python repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="PyPI" \
    --remote-username=my-username \
    --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \
    --remote-python-repo=PYPI

Apt(预览版)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=apt \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \
    --remote-apt-repo=APT_REPOSITORY_BASE \
    --remote-apt-repo-path="APT_REPOSITORY_PATH"

替换以下内容:

  • REMOTE_REPOSITORY_NAME 替换为代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION,并附上有关代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。
  • REMOTE_REPOSITORY_DESCRIPTION,并提供此远程代码库的外部代码库配置的可选说明。
  • APT_REPOSITORY_BASE 替换为 OS 软件包支持的上游中列出的 Apt 远程代码库支持的代码库基本名称之一。
  • APT_REPOSITORY_PATH,其中包含您要在远程代码库中缓存的上游代码库的其余网址(位于代码库基础网址之后)。

例如,以下命令会创建一个名为 my-repo 的远程制品库,以缓存 Google Cloud 项目 my-projectus-east1区域的 Debian buster 制品库。上游代码库的完整网址为 http://deb.debian.org/debian/dists/buster

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=apt \
    --location=us-east1 \
    --description="Apt remote repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Debian buster distribution" \
    --remote-apt-repo=DEBIAN \
    --remote-apt-repo-path="debian/dists/buster"

Yum(预览版)

gcloud artifacts repositories create REMOTE_REPOSITORY_NAME \
    --project=PROJECT_ID \
    --repository-format=yum \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE_REPOSITORY_DESCRIPTION" \
    --remote-yum-repo=YUM_REPOSITORY_BASE \
    --remote-yum-repo-path="YUM_REPOSITORY_PATH"

替换以下内容:

  • REMOTE_REPOSITORY_NAME 替换为代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • DESCRIPTION,并附上有关代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。
  • REMOTE_REPOSITORY_DESCRIPTION,并提供此远程代码库的外部代码库配置的可选说明。
  • YUM_REPOSITORY_BASE 替换为 Yum 远程代码库的支持的上游操作系统软件包中列出的受支持的代码库基本名称之一。
  • YUM_REPOSITORY_PATH,其中包含您要在远程代码库中缓存的上游代码库的其余网址(位于代码库基础网址之后)。

例如,以下命令会在 Google Cloud 项目 my-projectus-east1 区域中为上游代码库 9-stream/BaseOs/x86_64/os 创建一个名为 my-repo 的 Yum 软件包远程代码库。代码库的完整网址为 https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=yum \
    --location=us-east1 \
    --description="Yum remote repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="CentOS 8 x86" \
    --remote-yum-repo=CENTOS_STREAM \
    --remote-yum-repo-path="9-stream/BaseOs/x86_64/os"

Go

Artifact Registry Go 远程仓库仅支持公共上游 https://proxy.golang

gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
    --project=PROJECT_ID \
    --repository-format=go \
    --location=LOCATION \
    --description="DESCRIPTION" \
    --mode=remote-repository \
    --remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
    --remote-go-repo=https://proxy.golang.org

替换以下内容:

  • REMOTE-REPOSITORY-NAME 是代码库的名称。对于项目中的每个代码库位置,代码库名称不得重复。
  • PROJECT_ID 是项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 是代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list

  • DESCRIPTION 是代码库的可选说明。 请勿包含敏感数据,因为代码库说明不会加密。

  • REMOTE-REPOSITORY-DESCRIPTION 是相应远程代码库的外部代码库配置的说明。

例如,以下命令在 Google Cloud 项目 my-projectus-east1 区域中创建一个名为 my-repo 的远程代码库。

gcloud artifacts repositories create my-repo \
    --project=my-project \
    --repository-format=go \
    --location=us-east1 \
    --description="Remote Go repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Go proxy" \
    --remote-go-repo=https://proxy.golang.org

Artifact Registry 会创建您的代码库。运行以下命令可查看代码库的说明:

gcloud artifacts repositories describe REMOTE_REPOSITORY_NAME \
    --location=LOCATION

Terraform

使用 google_artifact_registry_repository 资源创建代码库。 必须使用 terraform-provider-google 版本 5.0.0 或更高版本。

如果您刚开始使用 Terraform for Google Cloud,请参阅 HashiCorp 网站上的使用入门 - Google Cloud 页面。

以下示例定义了提供商和 Terraform 资源名称为 my-repo 的远程代码库。

Docker

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "docker"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    docker_repository {
      public_repository = "DOCKER_HUB"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地点

  • PROJECT-ID是 Google Cloud 项目 ID。
  • LOCATION是代码库位置。
  • REPOSITORY_ID是代码库 ID。
  • DESCRIPTION是代码库的可选说明。 请勿包含敏感数据,因为代码库说明未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION是远程源的可选说明。
  • DRY_RUN_STATUS 用于确定清理政策是否会删除制品,或者在为代码库设置清理政策时,是否只会记录哪些制品会被删除。如果您不想向代码库添加清理政策,请省略此字段。 * true:将政策设置为在试运行模式下运行。在试运行模式下,系统不会删除任何制品。 * false:应用清理政策。工件是删除还是保留取决于政策。 如需详细了解清理政策,请参阅配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用政策的标记状态。值包括 taggeduntaggedanyany 适用于已标记和未标记的制品。如果代码库已启用不可更改标记,则无法删除带标记的制品。
    • TAG_PREFIXTAG_PREFIX_N 是要应用政策的标记前缀。
    • PKG_PREFIXPKG_PREFIX_N 是要应用政策的软件包前缀。
    • TIME_SINCE_UPLOAD 是指自制品版本上传到代码库以来经过的时间,以时长形式指定。您可以分别添加 smhd 来指定以秒、分钟、小时或天为单位的时长。
    • KEEP_COUNT 是要保留在代码库中的每个软件包的制品版本数。

Maven

如果您未指定版本政策,Artifact Registry 会创建一个默认存储软件包的快照版本和发布版本的 Maven 制品库。

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "maven"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    maven_repository {
      public_repository = "MAVEN_CENTRAL"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地点

  • PROJECT-ID是 Google Cloud 项目 ID。
  • LOCATION是代码库位置。
  • REPOSITORY_ID是代码库 ID。
  • DESCRIPTION是代码库的可选说明。 请勿包含敏感数据,因为代码库说明未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION是远程源的可选说明。
  • DRY_RUN_STATUS 用于确定清理政策是否会删除制品,或者在为代码库设置清理政策时,是否只会记录哪些制品会被删除。如果您不想向代码库添加清理政策,请省略此字段。 * true:将政策设置为在试运行模式下运行。在试运行模式下,系统不会删除任何制品。 * false:应用清理政策。工件是删除还是保留取决于政策。 如需详细了解清理政策,请参阅配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用政策的标记状态。值包括 taggeduntaggedanyany 适用于已标记和未标记的制品。如果代码库已启用不可更改标记,则无法删除带标记的制品。
    • TAG_PREFIXTAG_PREFIX_N 是要应用政策的标记前缀。
    • PKG_PREFIXPKG_PREFIX_N 是要应用政策的软件包前缀。
    • TIME_SINCE_UPLOAD 是指自制品版本上传到代码库以来经过的时间,以时长形式指定。您可以分别添加 smhd 来指定以秒、分钟、小时或天为单位的时长。
    • KEEP_COUNT 是要保留在代码库中的每个软件包的制品版本数。

如需将快照和发布版本存储在不同的代码库中,请使用 maven_config 块为代码库指定版本政策。此块支持以下设置:

  • version_policy 会将版本政策设置为以下某个值:
    • VERSION_POLICY_UNSPECIFIED:存储快照和发布软件包。此选项为默认设置。
    • 发布:仅限商店发布软件包。
    • SNAPSHOT:仅存储快照软件包。
  • allow_snapshot_overwrites 配置具有 SNAPSHOT 版本政策的代码库,以接受覆盖代码库中现有版本的非唯一快照。

以下示例定义了一个具有发布版本政策的 Maven 制品库。

provider "google" {
project = "my-project"
}

resource "google_artifact_registry_repository" "my-repo" {
provider = google-beta

location = "LOCATION"
repository_id = "my-repo"
description = "Maven repository"
format = "MAVEN"
mode = "REMOTE_REPOSITORY"
maven_config {
  version_policy = "RELEASE"
}
}

npm

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "npm"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    npm_repository {
      public_repository = "NPMJS"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地点

  • PROJECT-ID是 Google Cloud 项目 ID。
  • LOCATION是代码库位置。
  • REPOSITORY_ID是代码库 ID。
  • DESCRIPTION是代码库的可选说明。 请勿包含敏感数据,因为代码库说明未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION是远程源的可选说明。
  • DRY_RUN_STATUS 用于确定清理政策是否会删除制品,或者在为代码库设置清理政策时,是否只会记录哪些制品会被删除。如果您不想向代码库添加清理政策,请省略此字段。 * true:将政策设置为在试运行模式下运行。在试运行模式下,系统不会删除任何制品。 * false:应用清理政策。工件是删除还是保留取决于政策。 如需详细了解清理政策,请参阅配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用政策的标记状态。值包括 taggeduntaggedanyany 适用于已标记和未标记的制品。如果代码库已启用不可更改标记,则无法删除带标记的制品。
    • TAG_PREFIXTAG_PREFIX_N 是要应用政策的标记前缀。
    • PKG_PREFIXPKG_PREFIX_N 是要应用政策的软件包前缀。
    • TIME_SINCE_UPLOAD 是指自制品版本上传到代码库以来经过的时间,以时长形式指定。您可以分别添加 smhd 来指定以秒、分钟、小时或天为单位的时长。
    • KEEP_COUNT 是要保留在代码库中的每个软件包的制品版本数。

Python

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "python"
  kms_key_name = "KEY"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    python_repository {
      public_repository = "PYPI"
    }
  }
  cleanup_policy_dry_run = DRY_RUN_STATUS
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "DELETE"
    condition {
      tag_state    = "TAG_STATE"
      tag_prefixes = ["TAG_PREFIX", "TAG_PREFIX_N"]
      older_than   = "TIME_SINCE_UPLOAD"
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    condition {
      tag_state             = "TAG_STATE"
      tag_prefixes          = ["TAG_PREFIX", "TAG_PREFIX_N"]
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
    }
  }
  cleanup_policies {
    id     = "POLICY_NAME"
    action = "KEEP"
    most_recent_versions {
      package_name_prefixes = ["PKG_PREFIX", "PKG_PREFIX_N"]
      keep_count            = KEEP_COUNT
    }
  }
}

地点

  • PROJECT-ID是 Google Cloud 项目 ID。
  • LOCATION是代码库位置。
  • REPOSITORY_ID是代码库 ID。
  • DESCRIPTION是代码库的可选说明。 请勿包含敏感数据,因为代码库说明未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION是远程源的可选说明。
  • DRY_RUN_STATUS 用于确定清理政策是否会删除制品,或者在为代码库设置清理政策时,是否只会记录哪些制品会被删除。如果您不想向代码库添加清理政策,请省略此字段。 * true:将政策设置为在试运行模式下运行。在试运行模式下,系统不会删除任何制品。 * false:应用清理政策。工件是删除还是保留取决于政策。 如需详细了解清理政策,请参阅配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用政策的标记状态。值包括 taggeduntaggedanyany 适用于已标记和未标记的制品。如果代码库已启用不可更改标记,则无法删除带标记的制品。
    • TAG_PREFIXTAG_PREFIX_N 是要应用政策的标记前缀。
    • PKG_PREFIXPKG_PREFIX_N 是要应用政策的软件包前缀。
    • TIME_SINCE_UPLOAD 是指自制品版本上传到代码库以来经过的时间,以时长形式指定。您可以分别添加 smhd 来指定以秒、分钟、小时或天为单位的时长。
    • KEEP_COUNT 是要保留在代码库中的每个软件包的制品版本数。

Apt(预览版)

  provider "google" {
  project = "PROJECT_ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "APT"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    apt_repository {
      public_repository {
        repository_base = "REPOSITORY_BASE"
        repository_path = "REPOSITORY_PATH"
      }
    }
  }
}

地点

  • PROJECT-ID 是 Google Cloud 项目 ID。
  • LOCATION 是代码库位置。
  • REPOSITORY_ID 是代码库 ID。
  • DESCRIPTION 是代码库的可选说明。 请勿包含敏感数据,因为代码库说明未加密。
  • CONFIG_DESCRIPTION 是远程源的可选说明。
  • REPOSITORY_BASE 是 Apt 的预设公共代码库基础。可能的值包括 DEBIANUBUNTU
  • REPOSITORY_PATH 是基础代码库中的特定代码库。例如 debian/dists/buster

Yum(预览版)

  provider "google" {
  project = "PROJECT_ID"
}

resource "google_artifact_registry_repository" "my-repo" {
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "DESCRIPTION"
  format        = "YUM"
  mode          = "REMOTE_REPOSITORY"
  remote_repository_config {
    description = "CONFIG_DESCRIPTION"
    yum_repository {
      public_repository {
        repository_base = "REPOSITORY_BASE"
        repository_path = "REPOSITORY_PATH"
      }
    }
  }
}

地点

  • PROJECT-ID 是 Google Cloud 项目 ID。
  • LOCATION 是代码库位置。
  • REPOSITORY_ID 是代码库 ID。
  • DESCRIPTION 是代码库的可选说明。 请勿包含敏感数据,因为代码库说明未加密。
  • CONFIG_DESCRIPTION 是远程源的可选说明。
  • REPOSITORY_BASE 是 Yum 的预设公共代码库基础。 可能的值包括 CENTOSCENTOS_DEBUGCENTOS_VAULTCENTOS_STREAMROCKYEPEL
  • REPOSITORY_PATH 是基础代码库中的特定代码库。例如 "centos/8-stream/BaseOS/x86_64/os

Artifact Registry 会创建您的代码库。运行以下命令可查看代码库的说明:

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

创建代码库后:

修改代码库说明

您可以通过 Google Cloud 控制台或 gcloud CLI 更改代码库说明。

控制台

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择相应代码库,然后点击修改代码库

  3. 修改代码库说明,然后点击保存

gcloud

如需更新代码库说明,请运行以下命令:

gcloud artifacts repositories update REPOSITORY \
    --project=PROJECT \
    --location=LOCATION \
    --description="DESCRIPTION"

替换以下内容:

  • REPOSITORY:代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • PROJECT: Google Cloud项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 是代码库的单区域或多区域位置。 使用此标志可查看特定位置的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。
  • DESCRIPTION:代码库的说明。

服务边界内对上游来源的访问权限

VPC Service Controls 服务边界中的服务对边界外的资源具有受限的访问权限。

您可以允许或拒绝访问指定Google Cloud 项目和位置中的上游来源。

默认情况下,如果您未明确授予访问权限,Artifact Registry 会拒绝访问上游来源。

对于 Artifact Registry,所需的角色是 Artifact Registry Administrator (roles/artifactregistry.admin)。

查看上游来源的设置

如需查看特定项目和位置组合的配置,请运行以下命令:

gcloud artifacts vpcsc-config describe \
    --project=PROJECT_ID \
    --location=LOCATION

例如,使用以下命令可查看项目 my-projectus-east1 内的远程代码库设置:

gcloud artifacts vpcsc-config describe \
    --project=my-project \
    --location=us-east1

允许访问上游来源

如需允许访问指定位置的上游来源,请运行以下命令:

gcloud artifacts vpcsc-config allow \
    --project=PROJECT_ID \
    --location=LOCATION

例如,使用以下命令可允许项目 my-projectus-east1 的所有远程代码库访问其边界外的上游来源:

gcloud artifacts vpcsc-config allow \
    --project=my-project \
    --location=us-east1

拒绝访问上游来源

拒绝访问上游来源后,远程代码库中现有的缓存工件仍然可用。

如需拒绝访问指定位置的上游来源,请运行以下命令:

gcloud artifacts vpcsc-config deny \
    --project=PROJECT_ID \
    --location=LOCATION

例如,使用以下命令可阻止项目 my-projectus-west1 内的所有远程代码库访问边界外的上游来源:

gcloud artifacts vpcsc-config deny \
    --project=my-project \
    --location=us-west1

后续步骤