本页介绍了如何创建 Artifact Registry 远程代码库。
远程代码库会存储来自以下上游来源的工件:
- 标准 Artifact Registry 代码库。
- 外部源代码,如 Docker Hub、Maven Central、Python 软件包 Index (PyPI)、Debian 或 CentOS。
远程仓库可充当上游来源的代理, 加强对依赖项的控制当您首次请求软件包的某个版本时,Artifact Registry 会在远程代码库中下载并缓存该软件包。下次您请求同一软件包版本时,Artifact Registry 会提供缓存的副本。
如果您从不存在的上游来源请求工件,或者 不包含您指定的版本,则请求将失败。
其他仓库模式包括:
- 标准:默认的代码库模式。您可以直接将工件(例如私有软件包)上传或发布到标准代码库。虽然您可以直接从各个标准代码库下载,但使用虚拟代码库访问代码库组可以简化工具配置。
- 虚拟:充当单一访问权限的代码库 多个上游仓库的点,包括远程仓库和标准仓库 代码库
如需详细了解远程仓库的工作原理,请参阅 远程仓库概览。
准备工作
- 启用 Artifact Registry,包括启用 Artifact Registry API 和安装 Google Cloud CLI。
- 可选:为 gcloud CLI 命令配置默认值。
- 如果您需要使用客户管理的加密密钥 (CMEK) 加密代码库内容,请在 Cloud KMS 中为代码库创建并启用密钥。
如果您想对上游代码库进行身份验证,请启用 Secret Manager API。
gcloud services enable secretmanager.googleapis.com \ --project=PROJECT_ID
如果 Artifact Registry 位于 VPC Service Controls 服务边界内,请启用 Access Context Manager API(如果尚未启用)。
gcloud services enable accesscontextmanager.googleapis.com \ --project=PROJECT_ID
如果您想将 Artifact Registry 代码库设置为上游代码库,并且该代码库位于与远程代码库不同的项目中,则需要先向远程代码库项目的服务账号授予对上游代码库项目的访问权限,然后才能创建远程代码库。
授予 Service Agent 角色 远程代码库使用 Artifact Registry Service Agent 对 Artifact Registry 上游仓库进行身份验证。您必须授予遥控器 代码库服务代理对上游代码库的读取权限。
要向远程代码库服务代理授予 Artifact Registry Service Agent 角色 在上游代码库中,请运行以下命令:
gcloud projects add-iam-policy-binding UPSTREAM_REPOSITORY \ --member serviceAccount:service-REMOTE_PROJECT_NUMBER@REMOTE_PROJECT_ID.iam.gserviceaccount.com \ --location=REGION \ --project=UPSTREAM_PROJECT_ID \ --role roles/artifactregistry.serviceAgent
请替换以下内容:
UPSTREAM_REPOSITORY
是上游代码库的 ID。 Artifact Registry 上游仓库必须是标准模式仓库。REMOTE_PROJECT_NUMBER
是 项目编号 (用于您的远程代码库)。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 来加密资源或限制哪些 Cloud KMS 密钥可用于 CMEK 保护。
使用 Google Cloud 控制台创建远程代码库
打开 Google Cloud 控制台中的制品库页面。
点击创建代码库。
指定代码库名称。对于项目中的每个代码库位置,代码库名称不得重复。
在格式部分,选择代码库格式。
在代码库模式部分中,选择远程。
在远程代码库来源部分,选择以下任一方式输入上游代码库网址:
如果您选择了自定义,请在自定义代码库字段中输入完整的代码库网址。该网址在 创建代码库
如需查看一些常见上游网址的示例,请参阅自定义上游。
如果您选择了 Artifact Registry 制品库:
- 在 Artifact Registry 代码库字段中,输入要用作上游的代码库的完整名称,或点击浏览以查看您有权查看的代码库列表。仅与远程仓库具有相同格式的仓库 。
- 点击要用作上游的代码库的名称。
- 点击选择。
如果您选择了某个预设上游,或使用 自定义按钮,然后在 远程代码库身份验证模式:从以下选项中选择一项:
- 已验证:输入您的用户名和密钥,以便对上游代码库进行身份验证。
- 未经身份验证:跳过对上游代码库的身份验证。
如果您选择 Authenticated,请输入以下内容:
- 在用户名字段中,输入您在上游传送的用户名 存储库
- 在 Secret 字段中,输入您保存上游代码库密码的 Secret 版本。
您可以在创建代码库后修改这些值。如需详细了解如何对远程代码库上游进行身份验证,请参阅配置对远程代码库上游的身份验证。
在位置类型部分,选择代码库的位置:
选择位置类型:区域或多区域。 更改地点信息以反映您的选择。
在区域或多区域列表中,选择一个位置。
如需了解位置类型和支持的位置,请参阅 代码库位置
为代码库添加说明。说明有助于确定代码库的用途以及其包含的工件类型。
请勿包含敏感数据,因为仓库说明是 未加密。
如果您想使用标签来整理 点击添加标签,然后输入 标签。您可以在创建代码库后添加、修改或移除标签。
在加密部分,为代码库选择加密机制。
- Google 管理的密钥 - 使用 Google 拥有和 Google 管理的密钥来加密代码库内容。
- 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK。
如果您想使用清理政策删除未使用的工件,请在清理政策部分中执行以下操作:
- 选择试运行,在应用政策之前对其进行测试。
- 点击添加政策,将保留或删除政策添加到代码库。
- 在名称字段中,为清理政策指定一个描述性名称。
在政策类型部分,选择以下任一选项:
- 有条件删除:根据您设置的条件删除工件 定义。
- 有条件保留:根据您定义的条件保留工件。
保留最新版本:保留一定数量的最新版本 每个软件包的版本。
如需详细了解清理政策,请参阅 配置清理政策。
点击创建。
Artifact Registry 会创建代码库,并将其添加到代码库列表中。
创建代码库后,请执行以下操作:
- 授予对代码库的访问权限。
- 配置 Docker、软件包管理器和其他第三方客户端以对代码库进行身份验证。
- 配置 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-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
。
如需了解可用的预设上游和受支持的用户定义上游,请参阅支持的格式。
例如,以下命令创建一个名为
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-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
。
如需了解可用的预设上游和受支持的用户定义上游,请参阅支持的格式。
例如,以下命令创建一个名为
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-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
。
了解可用的预设上游项目以及 受支持的用户定义上行,请参阅支持的格式。
例如,以下命令会在 Google Cloud 项目 my-project
的区域 us-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" \
--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
。
了解可用的预设上游项目以及 受支持的用户定义上行,请参阅支持的格式。
例如,以下命令会在 Google Cloud 项目 my-project
的区域 us-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
,用于在 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
替换为 您希望在之后缓存到远程仓库中的上游仓库 存储库库
例如,以下命令会为上游代码库 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
创建代码库后,请执行以下操作:
- 向代码库授予访问权限。
- 配置清理政策以删除未使用的工件。
- 配置 Docker、软件包管理器和其他第三方客户端 对代码库进行身份验证
- 配置 Artifact Registry 远程仓库以进行身份验证 上游来源。
使用 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
是仓库的可选说明。请勿添加敏感数据,因为代码库说明未加密。KEY
是 Cloud Key Management Service 密钥的名称(如果您使用的是 使用客户管理的加密密钥 (CMEK) 进行加密。省略此参数可使用默认设置,即 Google 管理的加密密钥。CONFIG_DESCRIPTION
是远程来源的可选说明。DRY_RUN_STATUS
用于确定是否删除清理政策 或者仅记录在设置后会删除的工件 清理政策如果您不想向代码库添加清理政策,请省略。 *true
:设置在试运行模式下运行的政策。没有软件制品 将在试运行模式下删除。 *false
:应用清理政策。制品已被删除或 具体取决于政策 如需详细了解清理政策,请参阅配置清理政策。POLICY_NAME
是清理政策的名称。TAG_STATE
是要应用此政策的标记状态。值 为tagged
、untagged
和any
。any
适用于已标记的工件和未标记的工件。如果代码库启用了不可更改的标记,则无法删除带标记的工件。TAG_PREFIX
、TAG_PREFIX_N
是标记前缀 将政策应用到PKG_PREFIX
、PKG_PREFIX_N
是软件包前缀 要应用此政策的对象TIME_SINCE_UPLOAD
是指自工件版本上传到代码库以来经过的时间,以时长指定。您可以通过分别附加s
、m
、h
或d
来指定秒、分钟、小时或天时长。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
是要应用此政策的标记状态。值 为tagged
、untagged
和any
。any
适用于已标记的工件和未标记的工件。如果代码库启用了不可更改的标记,则无法删除带标记的工件。TAG_PREFIX
、TAG_PREFIX_N
是标记前缀 将政策应用到PKG_PREFIX
、PKG_PREFIX_N
是软件包前缀 要应用此政策的对象TIME_SINCE_UPLOAD
是指自工件版本上传到代码库以来经过的时间,以时长指定。您可以通过分别附加s
、m
、h
或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
是要应用此政策的标记状态。值 为tagged
、untagged
和any
。any
适用于已标记的工件和未标记的工件。如果代码库启用了不可更改的标记,则无法删除带标记的工件。TAG_PREFIX
、TAG_PREFIX_N
是标记前缀 将政策应用到PKG_PREFIX
、PKG_PREFIX_N
是软件包前缀 要应用此政策的对象TIME_SINCE_UPLOAD
是指自工件版本上传到代码库以来经过的时间,以时长指定。您可以通过分别附加s
、m
、h
或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
是要应用此政策的标记状态。值 为tagged
、untagged
和any
。any
适用于已标记的工件和未标记的工件。如果代码库启用了不可更改的标记,则无法删除带标记的工件。TAG_PREFIX
、TAG_PREFIX_N
是标记前缀 将政策应用到PKG_PREFIX
、PKG_PREFIX_N
是软件包前缀 要应用此政策的对象TIME_SINCE_UPLOAD
是指自工件版本上传到代码库以来经过的时间,以时长指定。您可以通过分别附加s
、m
、h
或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 的预设公共代码库基础。可能的值包括
DEBIAN
和UBUNTU
。 - 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 的预设公共代码库基础。可能的值包括
CENTOS
、CENTOS_DEBUG
、CENTOS_VAULT
、CENTOS_STREAM
、ROCKY
和EPEL
。 - REPOSITORY_PATH 是基准中的特定代码库。例如
"centos/8-stream/BaseOS/x86_64/os
。
Artifact Registry 会创建您的代码库。运行以下命令可查看代码库的说明:
gcloud artifacts repositories describe REPOSITORY \
--location=LOCATION
创建代码库后,请执行以下操作:
- 向代码库授予访问权限。
- 配置 Docker、软件包管理器和其他第三方客户端以向代码库进行身份验证。
- 配置 Artifact Registry 远程代码库以向其上游源进行身份验证。
修改代码库说明
您可以通过 Google Cloud 控制台或 gcloud CLI 更改代码库说明。
控制台
打开 Google Cloud 控制台中的制品库页面。
在代码库列表中,选择相应代码库,然后点击修改代码库。
修改代码库说明,然后点击保存。
gcloud
如需更新代码库说明,请运行以下命令:
gcloud artifacts repositories update REPOSITORY \
--project=PROJECT \
--location=LOCATION \
--description="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-project
的 us-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
后续步骤
- 创建 Docker Hub 远程代码库。
- 详细了解 Artifact Registry 远程代码库。
- 配置对 Docker Hub 的远程代码库身份验证。