创建远程代码库

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

远程代码库会存储来自以下上游来源的工件:

  • 标准 Artifact Registry 制品库。
  • 外部来源,例如 Docker Hub、Maven Central、Python 软件包索引 (PyPI)、Debian 或 CentOS。

远程仓库充当上游源代码的代理,以便您更好地控制依赖项。当您首次请求软件包的某个版本时,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 Service Agent 对 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 管理员 (roles/artifactregistry.admin)
  • 以 Secret 版本保存上游代码库凭据: 项目的 Secret Manager Admin (roles/secretmanager.admin)
  • 向 VPC Service Controls 服务边界之外的上游来源授予访问权限: 在应用了访问权限政策的项目、文件夹或组织中使用 Access Context Manager 编辑器 (roles/accesscontextmanager.policyEditor)

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

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

创建远程代码库

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

  • 工件格式
  • 代码库模式设置为远程。
  • 远程代码库上游源代码。
  • 代码库位置
  • 使用 的 Google 拥有和 Google 管理 的加密密钥或客户管理的加密密钥进行加密。默认情况下,Artifact Registry 使用的 Google 拥有且由 Google 管理 的加密密钥。

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

使用 Google Cloud 控制台创建远程代码库

  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 管理的 加密密钥 - 使用 由 Google 拥有且由 Google 管理的 加密密钥来加密代码库内容。
    • 客户管理的密钥 - 使用您通过 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 和密钥版本 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 和密钥版本 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 和密钥版本 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 和密钥版本 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 替换为 Apt 远程代码库的 OS package supported upstreams 中列出的受支持的代码库基本名称之一。
  • APT_REPOSITORY_PATH 与您要缓存在远程代码库中的上游代码库的网址的其余部分(位于代码库根目录之后)进行替换。

例如,以下命令会创建一个名为 my-repo 的远程代码库,以便在 Google Cloud 项目 my-project 的区域 us-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 远程代码库的 OS package supported upstreams 中列出的受支持的代码库基本名称之一搭配使用。
  • YUM_REPOSITORY_PATH 与您要在远程代码库中缓存的上游代码库的网址的其余部分(位于代码库根目录之后)。

例如,以下命令会为上游代码库 9-stream/BaseOs/x86_64/os 在 Google Cloud 项目 my-project 的区域 us-east1 中为名为 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"

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:存储快照和版本软件包。这是默认设置。
    • 发布版本:仅存储发布版本软件包。
    • 快照:仅存储快照软件包。
  • 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-project 中的 us-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

后续步骤