GSP1185

概览
借助 Artifact Registry,您可以存储不同的制品类型;在单个项目中创建多个制品库,并将某个特定区域或多区域位置与每个制品库相关联。制品库模式有多种。每种模式用途不同。下图展示了在不同模式下组合使用多个制品库的其中一种可行方案。该图显示了跨两个 Google Cloud 项目的工作流。在开发项目中,开发者构建了一个 Java 应用。在一个单独的运行时项目中,另一个构建会创建一个包含该应用的容器映像,以便部署到 Google Kubernetes Engine。
在本实验中,您将学习如何执行以下任务。
- 使用标准制品库部署私有软件包
- 使用远程制品库缓存 Maven Central 软件包
- 使用虚拟制品库在一个配置中合并多个上游制品库
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭证,让您可以在实验规定的时间内用来登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的网络浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
- 有充足时间完成实验 - 请注意,实验开始后无法暂停。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:
-
打开 Google Cloud 控制台按钮
- 剩余时间
- 进行该实验时必须使用的临时凭证
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示登录页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在实验详细信息面板中找到用户名。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在实验详细信息面板中找到密码。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭证。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
- 点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
Workspace 设置
- 在 Cloud Shell 中,设置您的项目 ID 和项目编号。将这两者保存为
PROJECT_ID 和 PROJECT_NUMBER 变量:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
- 启用 Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com
- 克隆本实验所需的制品库,然后前往
container-analysis 目录:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
任务 1. 标准制品库
标准制品库提供了一种存储专用软件包并在其他应用中共享这些软件包的方式
- 运行以下命令,为 Java 制品创建标准 Maven 制品库:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
如果看到 Cloud Shell 授权提示,请点击授权。
-
在 Cloud 控制台中,前往“Artifact Registry”>“制品库”,您会发现新创建的 Maven 制品库,名为 container-dev-java-repo。点击该制品库,可以看到它目前是空的。
-
在终端中查看制品库:
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
应返回类似如下所示的响应
Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'
点击“检查我的进度”,验证已完成以下目标:
创建标准 Maven 制品库
任务 2. 为 Artifact Registry 配置 Maven
- 运行以下命令,输出要添加到 Java 项目的制品库配置。
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
上述命令会返回要添加到项目 pom.xml 中的 xml。
-
repositories 部分用于指定 Maven 可以从何处下载远程制品以供当前项目使用。
-
distributionManagement 部分用于指定项目在部署时将推送到哪个远程制品库。
-
extensions 部分添加了 artifactregistry-maven-wagon,用于启用连接到 Artifact Registry 所需的身份验证和传输层
- 注意:Extensions(扩展程序)可以存在于 pom.xml 或 extensions.xml 中。如果项目依赖于父项目,则在加载 pom.xml 中的其余条目之前,系统会先访问这些依赖项。为确保父项目有权访问扩展程序,可将扩展程序放置在 extensions.xml 文件中,该文件会在 pom.xml 之前加载,从而使其可供父级依赖项使用。
- 在 Cloud Shell 中运行以下命令,以在当前目录中打开编辑器:
cloudshell workspace .
- 复制这三个部分,然后在 Cloud Shell 编辑器中打开
pom.xml,并将返回的设置添加到文件底部,刚好在 project 结束标记之前。
示例:(您的网址中的项目名称会有所不同)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
在 Maven 中配置 Artifact Registry 后,您现在可以使用 Artifact Registry 存储 Java jar 文件,供组织中的其他项目使用。
- 运行以下命令,将 Java 软件包上传到 Artifact Registry:
mvn deploy -DskipTests
如果您想再次运行此命令,请务必提升 pom.xml 中的版本。
- 在 Cloud 控制台中,前往 Artifact Registry > 制品库,然后点击
container-dev-java-repo,检查 hello-world 二进制制品已存在:
任务 3. 远程制品库
远程制品库可用于缓存第三方软件包,以提高可靠性和安全性。
- 运行以下命令,为 Maven Central 制品创建远程制品库:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
- 在 Cloud 控制台中,前往 Artifact Registry > 制品库。点击进入
maven-central-cache,您会发现它已创建,但目前为空。
点击“检查我的进度”,验证已完成以下目标:
创建远程制品库
- 在终端中查看制品库:
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
- 运行以下命令,输出要添加到 Java 项目的制品库配置。
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
-
将制品库部分添加到您的 pom.xml 中。确保不要复制输出中的外层 <repositories> 标记。
-
将新添加的制品库的 ID 更改为“central”,以确保每个制品库条目都有唯一的 ID。
示例:(您的网址中的项目名称会有所不同)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
- 在终端中运行以下命令,为项目创建
extensions.xml,以使用核心扩展程序机制,确保 Maven 能够解析来自 Artifact Registry 的父级或插件依赖项。
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
- 运行以下命令,使用远程制品库编译应用:
rm -rf ~/.m2/repository
mvn compile
- 在 Cloud 控制台中,前往 Artifact Registry > 制品库。点击进入
maven-central-cache,确认二进制制品缓存在该处:
任务 4. 虚拟制品库
虚拟制品库起着接口作用,以便通过单个配置访问多个制品库。这可简化制品使用者的客户端配置,并通过缓解依赖项混淆攻击来提高安全性。
- 创建政策文件
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
- 创建虚拟制品库
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
点击“检查我的进度”,验证已完成以下目标:
创建虚拟制品库
- 运行以下命令,输出要添加到 Java 项目的制品库配置。
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
- 将 pom 中的整个 repositories 部分替换为输出中的一个虚拟制品库部分。
示例:(您的网址中的项目名称会有所不同)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
从虚拟制品库拉取依赖项
由于虚拟制品库只是直通通道,并不存储任何实际软件包,为了清楚地演示该流程,您将删除之前创建的 maven-central-cache 制品库并重新创建,以便从空制品库重新开始
- 运行以下命令以重新创建缓存制品库
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
-
您可以在控制台中查看空制品库。Cloud 控制台 > Artifact Registry > 制品库
-
现在,运行以下命令来构建项目,以练习使用虚拟制品库:
rm -rf ~/.m2/repository
mvn compile
- 在控制台中查看软件包。Cloud 控制台 > Artifact Registry > 制品库。点击
maven-central-cache,确认二进制制品配置为从虚拟制品库拉取,但最终是从 maven-central-cache 拉取。
恭喜!
您学习了如何使用多种制品库模式,以及这些制品库的各种用途。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 9 月 10 日
上次测试实验的时间:2023 年 12 月 6 日
版权所有 2024 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。