创建远程代码库

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

远程仓库用于存储来自预设外部来源(例如 Docker Hub、Maven Central、Python 软件包索引 (PyPI)、Debian 或 CentOS, 以及用户定义的来源(适用于支持的格式)。答 远程仓库可充当外部源的代理, 对外部依赖项的控制首次在 Google Cloud 中 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
    

所需的角色

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

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

如需详细了解如何授予角色,请参阅管理访问权限

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

创建远程仓库

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

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

Artifact Registry 实施组织政策限制条件 需要 CMEK 来加密资源或限制哪些 Cloud KMS 密钥可用于 CMEK 保护。

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

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 点击创建代码库

  3. 指定代码库名称。对于项目中的每个代码库位置, 代码库名称必须是唯一的

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

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

  6. 远程代码库源代码部分中,选择 如果您要使用 用户定义的网址。

  7. 可选。如果您使用的是自定义上游,请在自定义代码库中 字段中输入自定义代码库网址。该网址在 创建代码库

  8. 远程代码库身份验证模式中,选择以下任一选项:

    • Authenticated(已通过身份验证):输入用于身份验证的用户名和密钥 您的上游仓库
    • Unauthenticated:表示跳过向上游代码库进行身份验证的步骤。
  9. 可选。如果您选择 Authenticated,请输入以下内容:

    • 用户名字段中,输入您在上游传送的用户名 存储库
    • 密钥字段中,输入您保存密钥的版本 上游代码库的密码。

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

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

    1. 选择位置类型:“单区域”或“多区域”。 更改地点信息以反映您的选择。

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

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

  11. 为代码库添加说明。说明有助于 确定代码库的用途和制品种类 资源。

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

  12. 如果您想使用标签来整理 点击添加标签,然后输入 标签。您可以在创建 存储库

  13. 加密部分,为 代码库

    • Google 管理的密钥 - 使用 Google 拥有和 Google 管理的密钥。
    • 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK
  14. 如果您想使用清理政策删除未使用的工件,请在 清理政策部分:

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

      • 条件删除:根据您设置的条件删除工件 定义。
      • 有条件保留:根据您定义的条件保留工件。
      • 保留最新版本:保留一定数量的最新版本 每个软件包的版本。

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

  15. 点击创建

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" \
    --remote-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-docker-repo=UPSTREAM

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于 项目的每个代码库位置,代码库名称必须是唯一的。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为单区域级或多区域级 代码库的位置。如果您设置默认值,则可以省略此标志。查看列表 请运行命令 gcloud artifacts locations list

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

  • 包含以下内容的说明:REMOTE-REPOSITORY-DESCRIPTION 此远程代码库的外部代码库配置。

  • USERNAME(如果您使用身份验证),可以选择性设置为 您用于向上游代码库进行身份验证的用户名。

  • SECRET_VERSION(可选) 替换为包含上游代码库密码的密钥版本。

  • UPSTREAM 替换为 上游仓库了解可用的预设上游项目 受支持的用户定义上游,请参阅支持的格式

例如,以下命令创建一个名为 Google Cloud 项目中区域 us-east1 中的 my-repo my-project,并使用 用户名 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" \
    --remote-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-mvn-repo=UPSTREAM

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于 项目的每个代码库位置,代码库名称必须是唯一的。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为单区域级或多区域级 代码库的位置。如果您设置默认值,则可以省略此标志。查看列表 请运行命令 gcloud artifacts locations list

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

  • 包含以下内容的说明:REMOTE-REPOSITORY-DESCRIPTION 此远程代码库的外部代码库配置。

  • USERNAME(如果您使用身份验证),可以选择性设置为 您用于向上游代码库进行身份验证的用户名。

  • SECRET_VERSION(可选) 替换为包含上游代码库密码的密钥版本。

  • UPSTREAM 替换为 上游仓库了解可用的预设上游项目 受支持的用户定义上游,请参阅支持的格式

例如,以下命令创建一个名为 Google Cloud 项目中区域 us-east1 中的 my-repo my-project,并使用 用户名 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" \
    --remote-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-npm-repo=UPSTREAM

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于 项目的每个代码库位置,代码库名称必须是唯一的。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为单区域级或多区域级 代码库的位置。如果您设置默认值,则可以省略此标志。查看列表 请运行命令 gcloud artifacts locations list

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

  • 包含以下内容的说明:REMOTE-REPOSITORY-DESCRIPTION 此远程代码库的外部代码库配置。

  • USERNAME(如果您使用身份验证),可以选择性设置为 您用于向上游代码库进行身份验证的用户名。

  • SECRET_VERSION(可选) 替换为包含上游代码库密码的密钥版本。

  • UPSTREAM 替换为 上游仓库了解可用的预设上游项目 受支持的用户定义上游,请参阅支持的格式

例如,以下命令创建一个名为 Google Cloud 项目中区域 us-east1 中的 my-repo my-project,并使用 用户名 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" \
    --remote-username=USERNAME \
    --remote-password-secret-version=SECRET_VERSION \
    --remote-python-repo=UPSTREAM

替换以下内容:

  • REMOTE-REPOSITORY-NAME 替换为代码库的名称。对于 项目的每个代码库位置,代码库名称必须是唯一的。
  • PROJECT_ID 替换为项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION 替换为单区域级或多区域级 代码库的位置。如果您设置默认值,则可以省略此标志。查看列表 请运行命令 gcloud artifacts locations list

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

  • 包含以下内容的说明:REMOTE-REPOSITORY-DESCRIPTION 此远程代码库的外部代码库配置。

  • USERNAME(如果您使用身份验证),可以选择性设置为 您用于向上游代码库进行身份验证的用户名。

  • SECRET_VERSION(可选) 替换为包含上游代码库密码的密钥版本。

  • UPSTREAM 替换为 上游仓库了解可用的预设上游项目 受支持的用户定义上游,请参阅支持的格式

例如,以下命令创建一个名为 Google Cloud 项目中区域 us-east1 中的 my-repo my-project,并使用 用户名 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 替换为某个受支持的代码库 基本名称 适用于 Apt 遥控器的操作系统软件包支持的上游 代码库
  • APT_REPOSITORY_PATH 替换为 您希望在之后缓存到远程仓库中的上游仓库 存储库库

例如,以下命令创建一个名为 my-repo,用于在 us-east1 区域中缓存 Debian buster 代码库 Google Cloud 项目 my-project。上游的完整网址 代码库为 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 Remote 的支持的操作系统软件包上游 代码库
  • YUM_REPOSITORY_PATH 替换为 您希望在之后缓存到远程仓库中的上游仓库 存储库库

例如,以下命令会为 Yum 软件包创建远程代码库 Google Cloud 项目的 us-east1 区域中名为 my-repo 上游代码库 centos/8-stream/BaseOs/x86_64/osmy-project

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 \
    --remote-yum-repo-path="centos/8-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 或更高版本。

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

以下示例定义了提供程序和具有 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 是代码库的可选说明。 请勿包含敏感数据,因为仓库说明 未加密。
  • KEY 是 Cloud Key Management Service 密钥的名称(如果您使用的是 使用客户管理的加密密钥 (CMEK) 进行加密。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION 是可选的遥控器说明 来源。
  • DRY_RUN_STATUS 用于确定是否删除清理政策 或者仅记录在设置后会删除的工件 清理政策如果您不想添加,请忽略 代码库的清理政策 * true:设置要在试运行模式下运行的政策。没有软件制品 将在试运行模式下删除。 * false:应用清理政策。制品已被删除或 具体取决于政策 如需详细了解清理政策,请参阅 配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用此政策的标记状态。值 为 taggeduntaggedanyany 会同时应用于已标记和 未标记工件。如果代码库启用了不可更改标记,且已标记 软件制品不能删除
    • TAG_PREFIXTAG_PREFIX_N 是标记前缀 将政策应用到
    • PKG_PREFIXPKG_PREFIX_N 是软件包前缀 要应用此政策的对象
    • TIME_SINCE_UPLOAD 是工件版本以来的时间 已上传到代码库,并指定为时长。您可以指定 通过附加 smh、 或 d
    • KEEP_COUNT 是工件的每个软件包的版本数 保存在您的代码库中

Maven

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

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 是代码库的可选说明。 请勿包含敏感数据,因为仓库说明 未加密。
  • KEY 是 Cloud Key Management Service 密钥的名称(如果您使用的是 使用客户管理的加密密钥 (CMEK) 进行加密。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION 是可选的遥控器说明 来源。
  • DRY_RUN_STATUS 用于确定是否删除清理政策 或者仅记录在设置后会删除的工件 清理政策如果您不想添加,请忽略 代码库的清理政策 * true:设置要在试运行模式下运行的政策。没有软件制品 将在试运行模式下删除。 * false:应用清理政策。制品已被删除或 具体取决于政策 如需详细了解清理政策,请参阅 配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用此政策的标记状态。值 为 taggeduntaggedanyany 会同时应用于已标记和 未标记工件。如果代码库启用了不可更改标记,且已标记 软件制品不能删除
    • TAG_PREFIXTAG_PREFIX_N 是标记前缀 将政策应用到
    • PKG_PREFIXPKG_PREFIX_N 是软件包前缀 要应用此政策的对象
    • TIME_SINCE_UPLOAD 是工件版本以来的时间 已上传到代码库,并指定为时长。您可以指定 通过附加 smh、 或 d
    • 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 是代码库的可选说明。 请勿包含敏感数据,因为仓库说明 未加密。
  • KEY 是 Cloud Key Management Service 密钥的名称(如果您使用的是 使用客户管理的加密密钥 (CMEK) 进行加密。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION 是可选的遥控器说明 来源。
  • DRY_RUN_STATUS 用于确定是否删除清理政策 也可以仅记录在设置条件时将会删除的制品 清理政策如果您不想添加,请忽略 代码库的清理政策 * true:设置要在试运行模式下运行的政策。没有软件制品 将在试运行模式下删除。 * false:应用清理政策。制品已被删除或 具体取决于政策 如需详细了解清理政策,请参阅 配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用此政策的标记状态。值 为 taggeduntaggedanyany 会同时应用于已标记和 未标记工件。如果代码库启用了不可更改标记,且已标记 软件制品不能删除
    • TAG_PREFIXTAG_PREFIX_N 是标记前缀 将政策应用到
    • PKG_PREFIXPKG_PREFIX_N 是软件包前缀 要应用此政策的对象
    • TIME_SINCE_UPLOAD 是工件版本以来的时间 已上传到代码库,并指定为时长。您可以指定 通过附加 smh、 或 d
    • 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 是代码库的可选说明。 请勿包含敏感数据,因为仓库说明 未加密。
  • KEY 是 Cloud Key Management Service 密钥的名称(如果您使用的是 使用客户管理的加密密钥 (CMEK) 进行加密。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  • CONFIG_DESCRIPTION 是可选的遥控器说明 来源。
  • DRY_RUN_STATUS 用于确定是否删除清理政策 或者仅记录在设置后会删除的工件 清理政策如果您不想添加,请忽略 代码库的清理政策 * true:设置要在试运行模式下运行的政策。没有软件制品 将在试运行模式下删除。 * false:应用清理政策。制品已被删除或 具体取决于政策 如需详细了解清理政策,请参阅 配置清理政策
    • POLICY_NAME 是清理政策的名称。
    • TAG_STATE 是要应用此政策的标记状态。值 为 taggeduntaggedanyany 会同时应用于已标记和 未标记工件。如果代码库启用了不可更改标记,且已标记 软件制品不能删除
    • TAG_PREFIXTAG_PREFIX_N 是标记前缀 将政策应用到
    • PKG_PREFIXPKG_PREFIX_N 是软件包前缀 要应用此政策的对象
    • TIME_SINCE_UPLOAD 是工件版本以来的时间 已上传到代码库,并指定为时长。您可以指定 通过附加 smh、 或 d
    • 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:a 单区域或多区域 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

例如,使用以下命令禁止访问上游来源 us-west1 中所有远程仓库在边界外 项目 my-project

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

后续步骤