本页介绍了如何创建 Artifact Registry 远程代码库。
远程代码库会存储来自以下上游来源的工件:
- 标准 Artifact Registry 制品库。
- 外部来源,例如 Docker Hub、Maven Central、Python 软件包索引 (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 代码库设置为上游代码库,并且该代码库位于与远程代码库不同的项目中,则需要先向远程代码库项目的服务账号授予对上游代码库项目的访问权限,然后才能创建远程代码库。
授予“服务代理”角色 远程仓库使用 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 控制台创建远程代码库
在 Google Cloud 控制台中打开制品库页面。
点击创建代码库。
指定代码库名称。对于项目中的每个代码库位置,代码库名称不得重复。
在格式部分,选择代码库格式。
在代码库模式部分中,选择远程。
在远程代码库来源部分,选择以下任一方式输入上游代码库网址:
如果您选择了自定义,请在自定义代码库字段中输入完整的代码库网址。代码库创建后,网址将无法更改。
如需查看一些常见上游网址的示例,请参阅自定义上游。
如果您选择了 Artifact Registry 制品库:
- 在 Artifact Registry 代码库字段中,输入要用作上游的代码库的完整名称,或点击浏览以查看您有权查看的代码库列表。系统只会列出与您的远程仓库采用相同格式的仓库。
- 点击要用作上游的代码库的名称。
- 点击选择。
如果您选择了其中一个预设的上游源或使用自定义按钮输入了完整网址,请在远程代码库身份验证模式中选择以下选项之一:
- 已验证:输入您的用户名和密钥,以便对上游代码库进行身份验证。
- 未经身份验证:跳过对上游仓库的身份验证。
如果您选择了已验证,请输入以下内容:
- 在用户名字段中,输入您在源代码库中的用户名。
- 在 Secret 字段中,输入您保存上游代码库密码的 Secret 版本。
您可以在创建代码库后修改这些值。如需详细了解如何对远程代码库上游进行身份验证,请参阅配置对远程代码库上游的身份验证。
在位置类型部分,选择代码库的位置:
选择位置类型:区域或多区域。位置列表会更改以反映您的选择。
在区域或多区域列表中,选择一个位置。
如需了解位置类型和受支持的位置,请参阅代码库位置
为代码库添加说明。说明有助于确定代码库的用途以及其包含的工件类型。
请勿添加敏感数据,因为代码库说明未加密。
如果您想使用标签整理代码库,请点击添加标签,然后输入标签的键值对。您可以在创建代码库后添加、修改或移除标签。
在加密部分,为代码库选择加密机制。
- 由 Google 管理的 加密密钥 - 使用 由 Google 拥有且由 Google 管理的 加密密钥来加密代码库内容。
- 客户管理的密钥 - 使用您通过 Cloud Key Management Service 控制的密钥来加密代码库内容。如需查看密钥设置说明,请参阅为代码库设置 CMEK。
如果您想使用清理政策删除未使用的工件,请在清理政策部分中执行以下操作:
- 选择试运行,在应用政策之前对其进行测试。
- 点击添加政策,将保留或删除政策添加到代码库。
- 在名称字段中为清理政策指定一个描述性名称。
在政策类型部分,选择以下选项之一:
- 按条件删除:根据您定义的条件删除工件。
- 按条件保留:根据您定义的条件保留工件。
保留最新版本:为每个软件包保留一定数量的最新版本。
如需详细了解清理政策,请参阅配置清理政策。
在 Artifact Analysis 部分,选择漏洞扫描设置:
已启用 - 允许在此代码库中进行扫描。您必须为项目启用 Container Scanning API。
当您启用 Container Scanning API 后,系统会立即开始计费。在项目上启用 Container Scanning API 后,系统会为所有新仓库和现有仓库启用漏洞扫描功能。当您将映像推送到 Artifact Registry 时,Artifact Analysis 会自动对其进行扫描。
已停用 - 阻止在此代码库中进行扫描。如果您的项目启用了 Container Scanning API,则系统会继续扫描其他仓库;此仓库将被排除。
如需详细了解漏洞扫描选项,请参阅启用和停用自动扫描。
点击创建。
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" \
--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-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=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-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=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-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" \
--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-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
的远程代码库,以便在 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
创建代码库后,请执行以下操作:
- 授予对代码库的访问权限。
- 配置清理政策以删除未使用的工件。
- 配置 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
是仓库的可选说明。请勿添加敏感数据,因为代码库说明未加密。- 如果您使用客户管理的加密密钥 (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
如果您未指定版本政策,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
是仓库的可选说明。请勿添加敏感数据,因为代码库说明未加密。- 如果您使用客户管理的加密密钥 (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
是要在代码库中保留的每个软件包的制品版本数。
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
是应用政策的标记状态。值为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
例如,您可以使用以下命令阻止项目 my-project
中 us-west1
中的所有远程代码库访问边界外的上游源代码:
gcloud artifacts vpcsc-config deny \
--project=my-project \
--location=us-west1
后续步骤
- 创建 Docker Hub 远程仓库。
- 详细了解 Artifact Registry 远程仓库。
- 配置对 Docker Hub 的远程代码库身份验证。