创建虚拟代码库

本页介绍如何创建 Artifact Registry 虚拟制品库。

虚拟制品库充当单一访问点,用于从一个或多个 上游制品库下载、安装或部署相同格式的制品。 上游制品库可以是 Artifact Registry 标准制品库或远程制品库。

如需详细了解虚拟制品库的工作原理,请参阅 虚拟制品库概览

准备工作

启用 Artifact Registry, 包括启用 Artifact Registry API 和 安装最新版本的 Google Cloud CLI。

所需角色

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

  • 创建虚拟制品库并授予对各个制品库的访问权限: Artifact Registry Administrator (roles/artifactregistry.admin) 项目的 Google Cloud Artifact Registry Administrator
  • 在项目级授予对制品库的访问权限: 项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin) Google Cloud
  • 在文件夹级授予对制品库的访问权限: Folder Admin (roles/resourcemanager.folderAdmin) 文件夹的
  • 在组织级授予对制品库的访问权限: 组织的 Organization Admin (roles/resourcemanager.organizationAdmin) Google Cloud

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

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

如果上游制品库位于其他项目中,则具有上游制品库的项目中的管理员必须拥有管理对这些制品库的访问权限。

创建上游制品库

在设置虚拟制品库之前,请先创建您希望通过虚拟制品库提供的上游制品库。

  1. 在上游制品库所在的 Google Cloud 区域中创建上游制品库。

  2. 虚拟制品库使用 Artifact Registry 服务代理 向其上游制品库进行身份验证。您必须向上游制品库授予服务代理读取权限。

    您可以在项目级向 Artifact Registry 服务代理授予 Artifact Registry Reader 角色,这样您就不需要向各个上游制品库授予访问权限。

    在每个具有上游制品库的项目中,运行以下命令:

    gcloud projects add-iam-policy-binding UPSTREAM_PROJECT_ID \
        --member serviceAccount:service-VIRTUAL-REPO-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role roles/artifactregistry.reader
    

    地点

    • UPSTREAM_PROJECT_ID 是具有上游制品库的 Google Cloud 项目 的 ID。
    • VIRTUAL_REPO_PROJECT_NUMBER虚拟制品库项目的 Google Cloud 项目编号。

    或者,如果您想向服务代理授予范围更窄的角色,请将权限 artifactregistry.repositories.readViaVirtualRepository 添加到自定义角色,然后向服务代理授予该角色。

    如需详细了解如何授予权限,请参阅 访问权限控制文档。

创建虚拟制品库

创建制品库时,您必须配置以下设置,这些设置在制品库创建后无法更改:

  • 制品格式。
  • 制品库模式(如果所选格式有多种模式可用)。
  • 制品库位置
  • 使用由 Google 拥有和 Google 管理的 加密密钥或 客户管理的加密密钥进行加密。默认情况下,Artifact Registry 使用 Google 拥有和 Google 管理的 加密密钥。

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

Google Cloud 控制台

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

    打开“代码库”页面

  2. 点击创建制品库

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

  4. 选择制品库格式。

  5. 制品库模式 下,选择虚拟

  6. Virtual Repository Upstreams(虚拟制品库上游)下,点击 Add Upstream(添加上游)以添加 上游制品库。

    • 上游制品库可以是标准制品库、远程制品库或虚拟制品库。
    • 上游制品库必须与虚拟 制品库位于同一位置,但可以位于不同的 Google Cloud 项目中。
    • 上游制品库必须与虚拟制品库的制品格式相同。

    为每个上游 制品库指定优先级和政策名称。优先级值越高,优先级越高。 例如,值 10 的优先级高于值 1。在优先级值之间留出空间,以便灵活地添加优先级介于现有值之间的上游制品库。

  7. 位置类型 下,选择制品库的位置:

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

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

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

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

    请勿包含敏感数据,因为制品库说明不会加密。

  9. 如果您想使用 标签 来整理您的 制品库,请点击 Add Label (添加标签),然后输入标签的键值对。您可以在创建制品库后添加、修改或移除标签。

  10. 加密 部分中,选择制品库的加密机制。

    • Google-managed encryption key \- 使用 加密制品库内容 Google-owned and Google-managed encryption key。
    • 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密制品库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK
  11. 点击创建

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

创建制品库后,您可以执行以下操作:

gcloud CLI

如需创建虚拟制品库,您需要在政策文件中定义上游制品库,然后使用该政策文件创建制品库。

  1. 使用以下设置创建 JSON 格式的上游政策文件:

    [{
    "id" : "POLICY_ID",
    "repository" : "UPSTREAM_REPOSITORY_RESOURCE_NAME",
    "priority" : PRIORITY
    }, {...}]
    

    替换以下内容:

    • POLICY_ID:政策的名称。政策中的每个上游制品库都必须具有唯一的政策 ID。
    • UPSTREAM_REPO_RESOURCE_NAME:上游制品库的名称,格式为:

      projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY
      
      • 上游制品库可以是标准制品库、远程制品库或虚拟制品库。
      • 上游制品库必须与虚拟 制品库位于同一位置,但可以位于不同的 Google Cloud 项目中。
      • 上游制品库必须与虚拟制品库的制品格式相同。
    • PRIORITY 是一个整数,表示上游制品库的 优先级。优先级值越高,优先级越高。 例如,值 10 的优先级高于 值 1

    以下示例展示了一个名为 policies.json 的政策文件,其中包含四个上游制品库。upstream1priority 值最高,因此 Artifact Registry 会先搜索它。upstream-testpriority 值最低,因此 Artifact Registry 会最后搜索它。 upstream2upstream3 的优先级相同。如果 Artifact Registry 在具有相同优先级的制品库中找到请求的软件包,则可以从任一制品库提供该软件包。

    [{
    "id" : "upstream1",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo1",
    "priority" : 100
    }, {
    "id" : "upstream2",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo2",
    "priority" : 80
    }, {
    "id" : "upstream3",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo2",
    "priority" : 80
    }, {
    "id" : "upstream-test",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-test-repo",
    "priority" : 20
    }]
    

    此示例还在优先级值之间留出了空间。这些间隙提供了灵活性,以便添加优先级介于现有值之间的上游制品库。例如,您可以添加优先级为 70upstream-3 制品库,以便 Artifact Registry 在搜索 upstream-test 之前搜索它。

    请考虑将上游政策文件存储在源代码控制系统中,以便日后重复使用该文件来更改上游制品库设置并跟踪历史更改。

  2. 在包含上游政策文件的目录中,运行以下命令以创建虚拟制品库:

    gcloud artifacts repositories create VIRTUAL-REPOSITORY-NAME \
        --project=PROJECT_ID \
        --repository-format=FORMAT \
        --mode=virtual-repository \
        --location=LOCATION \
        --description="DESCRIPTION" \
        --upstream-policy-file=UPSTREAM_POLICY_FILE
    

    替换以下内容:

    • VIRTUAL-REPOSITORY-NAME:虚拟制品库的名称。
    • PROJECT_ID:您要在其中创建虚拟制品库的项目的 ID。如果省略此标志,则系统会使用当前项目或默认项目。
    • FORMAT:制品库的格式。以下值可用:
      • apt(私密预览版)
      • docker
      • go
      • maven
      • npm
      • python
      • yum(私密预览版)
    • LOCATION:制品库的单区域或多区域 位置。如果您设置默认值,则可以 省略此标志。如需查看受支持位置的列表,请运行以下命令:

      gcloud artifacts locations list
      
    • DESCRIPTION:可选。制品库的说明。 请勿包含敏感数据,因为制品库说明不会加密。

    • UPSTREAM_POLICY_FILE:上游政策文件的路径。

    例如,以下命令会在区域 us-west1 中为 Python 软件包创建一个名为 virtual-repo 的虚拟制品库,其设置位于 policies.json 中。

    gcloud artifacts repositories create virtual-repo \
    --repository-format=python \
    --mode=virtual-repository \
    --location=us-west1 \
    --description="Python virtual repository" \
    --upstream-policy-file=policies.json
    

Artifact Registry 会创建虚拟制品库。

Terraform

使用 google_artifact_registry_repository 资源 创建制品库。 terraform-provider-google 版本 5.0.0 或更高版本是必需的。

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

以下示例定义了提供方、一个 Terraform 资源名称为 my-repo 的虚拟制品库和一个 Terraform 资源名称为 my-repo-upstream 的上游制品库。

Docker

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "docker"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "docker"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

地点

  • PROJECT-ID 是 Google Cloud 项目 ID。
  • UPSTREAM_LOCATION 是上游制品库位置。请注意,虚拟制品库和上游制品库必须位于同一区域或多区域。
  • UPSTREAM_REPOSITORY_ID 是上游制品库 ID。
  • UPSTREAM_REPOSITORY_DESCRIPTION 是上游制品库的可选说明 。
  • LOCATION 是虚拟制品库位置。
  • REPOSITORY_ID 是虚拟制品库 ID。
  • DESCRIPTION 是虚拟 制品库的可选说明。请勿包含敏感数据,因为制品库说明不会加密。
  • KEY 是 Cloud Key Management Service 密钥的名称,如果您使用 客户管理的加密密钥 (CMEK) 进行加密。省略 此参数可使用默认设置, Google 拥有和 Google 管理的 加密密钥。
  • PRIORITY 是可选的优先级值。 Artifact Registry 会按降序评估优先级。 例如,值 10 的优先级高于值 1。优先级值较高的条目在拉取顺序中优先。

Maven

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

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "maven"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "maven"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

地点

  • PROJECT-ID 是 Google Cloud 项目 ID。
  • UPSTREAM_LOCATION 是上游制品库位置。请注意,虚拟制品库和上游制品库必须位于同一区域或多区域。
  • UPSTREAM_REPOSITORY_ID 是上游制品库 ID。
  • UPSTREAM_REPOSITORY_DESCRIPTION 是上游制品库的可选说明 。
  • LOCATION 是虚拟制品库位置。
  • REPOSITORY_ID 是虚拟制品库 ID。
  • DESCRIPTION 是虚拟 制品库的可选说明。请勿包含敏感数据,因为制品库说明不会加密。
  • KEY 是 Cloud Key Management Service 密钥的名称,如果您使用 客户管理的加密密钥 (CMEK) 进行加密。省略 此参数可使用默认设置, Google 拥有和 Google 管理的 加密密钥。
  • PRIORITY 是可选的优先级值。 Artifact Registry 会按降序评估优先级。 例如,值 10 的优先级高于值 1。优先级值较高的条目在拉取顺序中优先。

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

  • version_policy 使用以下某个值设置版本政策:
    • VERSION_POLICY_UNSPECIFIED:存储快照和发布软件包。这是默认设置。
    • RELEASE:仅存储发布软件包。
    • SNAPSHOT:仅存储快照软件包。
  • allow_snapshot_overwrites 配置具有 SNAPSHOT 版本政策的制品库,以接受覆盖制品库中现有版本的非唯一快照。

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

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

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

location = "us-central1"
repository_id = "my-repo"
description = "Maven repository"
format = "MAVEN"
maven_config {
  version_policy = "RELEASE"
}
}

npm

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "npm"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "npm"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

地点

  • PROJECT-ID 是 Google Cloud 项目 ID。
  • UPSTREAM_LOCATION 是上游制品库位置。请注意,虚拟制品库和上游制品库必须位于同一区域或多区域。
  • UPSTREAM_REPOSITORY_ID 是上游制品库 ID。
  • UPSTREAM_REPOSITORY_DESCRIPTION 是上游制品库的可选说明 。
  • LOCATION 是虚拟制品库位置。
  • REPOSITORY_ID 是虚拟制品库 ID。
  • DESCRIPTION 是虚拟 制品库的可选说明。请勿包含敏感数据,因为制品库说明不会加密。
  • KEY 是 Cloud Key Management Service 密钥的名称,如果您使用 客户管理的加密密钥 (CMEK) 进行加密。省略 此参数可使用默认设置, Google 拥有和 Google 管理的 加密密钥。
  • PRIORITY 是可选的优先级值。 Artifact Registry 会按降序评估优先级。 例如,值 10 的优先级高于值 1。优先级值较高的条目在拉取顺序中优先。

Python

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "python"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "python"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

地点

  • PROJECT-ID 是 Google Cloud 项目 ID。
  • UPSTREAM_LOCATION 是上游制品库位置。请注意,虚拟制品库和上游制品库必须位于同一区域或多区域。
  • UPSTREAM_REPOSITORY_ID 是上游制品库 ID。
  • UPSTREAM_REPOSITORY_DESCRIPTION 是上游制品库的可选说明 。
  • LOCATION 是虚拟制品库位置。
  • REPOSITORY_ID 是虚拟制品库 ID。
  • DESCRIPTION 是虚拟 制品库的可选说明。请勿包含敏感数据,因为制品库说明不会加密。
  • KEY 是 Cloud Key Management Service 密钥的名称,如果您使用 客户管理的加密密钥 (CMEK) 进行加密。省略 此参数可使用默认设置, Google 拥有和 Google 管理的 加密密钥。
  • PRIORITY 是可选的优先级值。 Artifact Registry 会按降序评估优先级。 例如,值 10 的优先级高于值 1。优先级值较高的条目在拉取顺序中优先。

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

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

创建制品库后,您可以执行以下操作:

更新上游制品库

您可以更改上游制品库列表或调整上游制品库的优先级。

控制台

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

    打开“代码库”页面

  2. 在制品库列表中,选择虚拟制品库,然后点击修改制品库

  3. Virtual Repository Upstream (虚拟制品库上游)列表中,进行所需的更改。 您可以添加和移除制品库,也可以更改列表中制品库的优先级

  4. 点击保存

gcloud

  1. 使用您的更改修改上游政策文件。例如,您可能需要添加上游制品库或调整优先级设置。

    如果您想移除所有上游制品库,您的政策文件应包含一组空的制品库。

    []
    
  2. 运行以下命令,将更改应用于虚拟制品库。

    gcloud artifacts repositories update REPOSITORY \
        --upstream-policy-file=UPSTREAM_POLICY_FILE
    

    UPSTREAM_POLICY_FILE 替换为上游政策文件的路径。

    如需详细了解该命令,请参阅 gcloud artifacts repositories update 参考 文档。

修改制品库说明

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

控制台

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

    打开“代码库”页面

  2. 在制品库列表中,选择制品库,然后点击修改制品库

  3. 修改制品库说明,然后点击保存

gcloud

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

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

替换以下内容:

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