创建虚拟代码库

本页面介绍了如何在虚拟 Artifact Registry 上 代码库

虚拟代码库充当下载、安装或 从一个或多个上游仓库部署采用相同格式的制品。 上游仓库可以是 Artifact Registry 标准仓库,也可以是远程仓库 存储库

其他仓库模式包括:

  • 标准:默认的代码库模式。您上传或发布 私有软件包等工件直接上传到标准代码库中。 虽然您可以直接从各个标准代码库下载, 通过虚拟代码库访问代码库组可以简化 工具配置。
  • Remote(仅限语言包代码库):拉取 可以缓存 Maven Central 或 PyPI 等公共代码库中的制品。 它可以充当公共代码库的代理,因此您可以更好地控制 对外部依赖项进行管理

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

准备工作

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

所需的角色

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

  • 创建虚拟代码库并授予对各个代码库的访问权限: Artifact Registry 代码库管理员 (roles/artifactregistry.repoAdmin) Google Cloud 项目
  • 在项目级授予对代码库的访问权限: 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 Service Agent 向上游仓库进行身份验证您必须授予该服务 对上游代码库的代理读取权限。

    您可以将 Artifact Registry Reader 角色授予 项目中的 Artifact Registry 服务代理 因此您无需向各个上游 代码库

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

    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. 代码库模式下,选择 Virtual

  6. 虚拟代码库上游下,点击添加上游以添加 上游代码库

    • 上游仓库可以是标准仓库、远程仓库或虚拟仓库。
    • 上游仓库必须与该虚拟仓库位于同一位置 但可以位于其他 Google Cloud 项目中。
    • 上游仓库必须与虚拟仓库中的工件格式相同 存储库

    为每个上游指定优先级和政策名称 存储库优先级值越高,优先级值越低。 在优先级值之间留出空间,以便灵活添加 优先级介于现有值之间的上游仓库。

  7. 位置类型下,选择代码库的位置:

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

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

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

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

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

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

  10. 加密部分,为 代码库

    • Google 管理的密钥 - 使用 Google 拥有和 Google 管理的密钥。
    • 客户管理的密钥 - 使用您通过 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 是一个整数,表示 上游代码库的优先级。优先级较高 值优先于较小的值。

    以下示例显示了名为 policies.json 的政策文件,其中包含四个 上游代码库upstream1priority具有最高值, 因此 Artifact Registry 会先进行搜索。upstream-test具有 priority 值最低,因此 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
    }]
    

    此示例还在优先级值之间留出了空间。这些差距 支持灵活添加上游仓库,这些仓库的优先级高于 不同现有值之间。例如,您可以添加 upstream-3 设置为 70 的代码库,以便 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 是代码库的格式。以下 可用的值: <ph type="x-smartling-placeholder">
        </ph>
      • apt(非公开预览版)
      • docker
      • maven
      • npm
      • python
      • yum(非公开预览版)
    • LOCATION 是代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行以下命令:

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

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

    例如,以下命令创建一个名为 virtual-repo,适用于 us-west1 区域中设置如下的 Python 软件包 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 或更高版本。

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

以下示例定义了提供程序,即一个包含 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 是可选说明 创建 Deployment 清单
  • LOCATION 是虚拟代码库位置。
  • REPOSITORY_ID 是虚拟代码库 ID。
  • DESCRIPTION 是对虚拟机的 存储库请勿包含敏感数据,因为仓库说明 未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略 此参数以使用默认设置(Google 拥有的密钥和 Google 管理的密钥)。
  • PRIORITY 是可选的优先级值。优先级最高 为 1。具有更高优先级值的条目在拉取中会优先 订单。

Maven

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

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 是可选说明 创建 Deployment 清单
  • LOCATION 是虚拟代码库位置。
  • REPOSITORY_ID 是虚拟代码库 ID。
  • DESCRIPTION 是对虚拟机的 存储库请勿包含敏感数据,因为仓库说明 未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略 此参数以使用默认设置(Google 拥有的密钥和 Google 管理的密钥)。
  • PRIORITY 是可选的优先级值。优先级最高 为 1。具有更高优先级值的条目在拉取中会优先 订单。

为了将快照和发布版本存储在不同的 指定代码库的版本政策 使用 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 = "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 是可选说明 创建 Deployment 清单
  • LOCATION 是虚拟代码库位置。
  • REPOSITORY_ID 是虚拟代码库 ID。
  • DESCRIPTION 是对虚拟机的 存储库请勿包含敏感数据,因为仓库说明 未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略 此参数以使用默认设置(Google 拥有的密钥和 Google 管理的密钥)。
  • PRIORITY 是可选的优先级值。优先级最高 为 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 是可选说明 创建 Deployment 清单
  • LOCATION 是虚拟代码库位置。
  • REPOSITORY_ID 是虚拟代码库 ID。
  • DESCRIPTION 是对虚拟机的 存储库请勿包含敏感数据,因为仓库说明 未加密。
  • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略 此参数以使用默认设置(Google 拥有的密钥和 Google 管理的密钥)。
  • PRIORITY 是可选的优先级值。优先级最高 为 1。具有更高优先级值的条目在拉取中会优先 订单。

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

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

创建代码库后,请执行以下操作:

更新上游仓库

您可以更改上游仓库列表,也可以调整 上游代码库

控制台

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

    打开“代码库”页面

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

  3. 虚拟代码库上游列表中,进行所需的更改。 您可以添加和移除代码库,也可以 列表中的多个代码库

  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:Google Cloud 项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • LOCATION:a 单区域或多区域 location。 使用此标志查看特定位置的代码库。如果您 配置了默认位置 您可以省略此标志,以使用默认值。
  • DESCRIPTION:代码库的说明。