实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

在 Google Cloud 上实现 CI/CD 流水线:实验室挑战赛

实验 25 分钟 universal_currency_alt 5 个点数 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP393

Google Cloud 自学实验的徽标

概览

在实验室挑战赛中,我们会为您提供一个场景和一系列任务。您将使用从课程的各个实验中学到的技能自行确定如何完成这些任务,而不是按照分步说明进行操作。自动评分系统(显示在本页面中)会提供有关您是否已正确完成任务的反馈。

在您参加实验室挑战赛期间,我们不会再教授新的 Google Cloud 概念知识。您需要拓展所学的技能,例如通过更改默认值和查看并研究错误消息来更正您自己所犯的错误。

要想获得满分,您必须在该时间段内成功完成所有任务!

我们建议已报名参加在 Google Cloud 上实现 CI/CD 流水线课程的学员参加此实验室挑战赛。准备好接受挑战了吗?

测试的主题

  • 使用 Cloud Build 构建容器并存储在 Artifact Registry 中。
  • 使用 Skaffold 设置 Cloud Deploy 流水线。
  • 通过升级审批部署到多个环境。
  • Deployment 回滚

设置

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

您必须等待实验预配完毕,然后才能对环境进行任何更改!当实验指示环境已准备就绪时,您就可以使用预配置的环境部分了。

挑战场景

您开始担任一个新的角色,即 Jooli Inc. 的云工程师。新管理层决定进行现代化改造,并认为最好用托管式基础设施和自动化集成与交付流水线来完全取代旧的系统。他们要求您找到并测试实现这一目标的最佳工具和服务。

到今天结束时,管理层希望看到一个概念验证,能够满足以下所有方面:

  • 容器映像存储在安全可靠的注册表中。
  • 自动扫描容器映像,并提供有关安全漏洞的详细报告。
  • 在托管式基础设施上运行的测试 Web 应用。
  • 以代码形式定义的 CI/CD 流水线,以消除人为错误。
  • 一种可靠、简单、快速的方式,可用于部署代码并将其提升到类似生产的环境,或在必要时回滚。

您需要帮助管理 Jooli 的云基础设施和部署工具。常见任务包括为项目预配资源,以及实施新产品和服务,以确保 Jooli Inc. 有效地实现现代化改造并遵循最佳实践。

您应该已经掌握了完成这些任务所需的技能和知识,所以我们不会提供分步指南。

您应遵循的一些 Jooli Inc. 标准:

  • 除非另有指示,否则应在 区域中创建所有资源。
  • 使用项目默认 VPC。
  • 分配经济实惠的资源容量。各个项目会受到监控,过度使用资源会导致其所属的项目终止(可能包括您的项目),因此请务必仔细规划。这是监控团队愿意与您分享的指南:除非另有指示,否则请使用默认机器类型。

您的挑战

您刚坐在办公桌前并打开新笔记本电脑,就收到了完成以下一系列任务的请求。祝您好运!

  1. 准备工作 - 启用 API、创建 GKE 集群并在 Artifact Registry 中创建 Docker 代码库。
  2. 克隆源代码、构建映像并推送到 Artifact Registry。
  3. 创建交付流水线、目标和发布。
  4. 重新构建并推送映像,使用“latest”标记。
  5. 使用最新发布来创建新版本。
  6. 将最新发布提升到第二个集群。
  7. 回滚对第二个集群的更改,进行修改,然后重新发布。

任务 1. 准备工作 - 设置环境、启用 API 并创建集群

  1. 为您的项目 ID 设置环境变量(这一点很重要,因为下面的几个配置文件中都会用到它)。您可以使用以下命令:
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') export REGION={{{ project_0.default_region }}} gcloud config set compute/region $REGION
  1. 使用以下命令在 Google Cloud 项目中启用以下服务:
  • container.googleapis.com
  • clouddeploy.googleapis.com
  • artifactregistry.googleapis.com
  • cloudbuild.googleapis.com
gcloud services enable \ container.googleapis.com \ clouddeploy.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com
  1. 使用以下命令为 Kubernetes 和 Cloud Deploy 启用权限:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
  1. 创建一个 Cloud Storage 存储桶,供 Cloud Build 存储源代码和日志。
gsutil mb -p $PROJECT_ID gs://${PROJECT_ID}_cloudbuild
  1. 创建 Artifact Registry 代码库

创建一个用于存储 Docker 容器的代码库。

将代码库命名为 cicd-challenge

gcloud artifacts repositories create cicd-challenge \ --description="Image registry for tutorial web app" \ --repository-format=docker \ --location=$REGION
  1. 创建 Google Kubernetes Engine 集群。

创建两个 GKE 集群,分别用于预演和生产环境,并命名为 cd-stagingcd-production。集群应为单可用区和单节点。

gcloud container clusters create cd-staging --node-locations={{{ project_0.default_zone }}} --num-nodes=1 --async gcloud container clusters create cd-production --node-locations={{{ project_0.default_zone }}} --num-nodes=1 --async

任务 2. 构建映像并上传到代码库

  1. 使用以下命令将实验代码库克隆到您的主目录:
cd ~/ git clone https://github.com/GoogleCloudPlatform/cloud-deploy-tutorials.git cd cloud-deploy-tutorials git checkout c3cae80 --quiet cd tutorials/base
  1. 使用以下命令创建 skaffold.yaml 配置:
envsubst < clouddeploy-config/skaffold.yaml.template > web/skaffold.yaml cat web/skaffold.yaml

现在,web 目录包含 skaffold.yaml 配置文件,其中提供了 Skaffold 构建应用容器映像所需的说明。

  1. 运行 skaffold 命令来构建应用,并将容器映像部署到之前创建的 Artifact Registry 代码库。

提示:使用您之前创建的代码库的完整路径

cd web skaffold build --interactive=false \ --default-repo <INSERT YOUR ARTIFACT REPOSITORY HERE> \ --file-output artifacts.json cd .. 验证容器已创建并添加到代码库

任务 3. 创建交付流水线

运行以下命令以复制流水线模板文件:

  1. 使用 delivery-pipeline.yaml 文件创建 delivery-pipeline 资源:
cp clouddeploy-config/delivery-pipeline.yaml.template clouddeploy-config/delivery-pipeline.yaml sed -i "s/targetId: staging/targetId: cd-staging/" clouddeploy-config/delivery-pipeline.yaml sed -i "s/targetId: prod/targetId: cd-production/" clouddeploy-config/delivery-pipeline.yaml sed -i "/targetId: test/d" clouddeploy-config/delivery-pipeline.yaml
  1. 使用 deploy/region 配置参数来设置部署区域。
  2. 使用 gcloud beta deploy 命令应用您在上面创建的流水线配置
  3. 使用以下命令验证交付流水线已经创建:
gcloud beta deploy delivery-pipelines describe web-app

配置部署目标

创建两个交付流水线目标,每个 GKE 集群对应一个目标。

确保集群已准备就绪

现在,这两个 GKE 集群应该都在运行,但最好还是验证一下。

  • 获取集群的状态:
gcloud container clusters list --format="csv(name,status)"

所有集群都应处于“RUNNING”(正在运行)状态,如下面的输出所示。如果集群尚未标记为“RUNNING”,请重试上述命令,直到其状态变为“RUNNING”为止。

为每个集群创建上下文

  • 使用以下命令获取每个集群的凭据,并创建一个易于使用的 kubectl 上下文,以便稍后引用这些集群:
CONTEXTS=({INSERT YOUR TARGETS HERE}) for CONTEXT in ${CONTEXTS[@]} do gcloud container clusters get-credentials ${CONTEXT} --region ${REGION} kubectl config rename-context gke_${PROJECT_ID}_${REGION}_${CONTEXT} ${CONTEXT} done

在每个集群中创建一个命名空间

  • 使用以下命令在每一个集群内创建一个 Kubernetes 命名空间 (web-app):
for CONTEXT in ${CONTEXTS[@]} do kubectl --context ${CONTEXT} apply -f kubernetes-config/web-app-namespace.yaml done

创建交付流水线目标

  1. 使用以下命令为每个目标创建一个目标定义文件(无需更改):
envsubst < clouddeploy-config/target-staging.yaml.template > clouddeploy-config/target-cd-staging.yaml envsubst < clouddeploy-config/target-prod.yaml.template > clouddeploy-config/target-cd-production.yaml sed -i "s/staging/cd-staging/" clouddeploy-config/target-cd-staging.yaml sed -i "s/prod/cd-production/" clouddeploy-config/target-cd-production.yaml
  1. 将目标文件应用到 Cloud Deploy。

目标在 yaml 文件中定义。每个目标都会配置该目标相关的集群信息。

显示预演目标的相关详细信息:

cat clouddeploy-config/target-cd-staging.yaml 验证 Cloud Deploy 目标已经创建。

任务 4. 创建发布

  1. 使用 gcloud beta deploy releases 命令以及您之前创建的 skaffold 和 artifacts.json 文件来创建发布。
  • 将发布命名为 web-app-001,并使用交付流水线 web-app

提示:您的源目录应为 web/

  • 使用以下命令或在控制台中验证您的应用已经部署到预演环境 (cd-staging)。
gcloud beta deploy rollouts list \ --delivery-pipeline web-app \ --release web-app-001

Cloud Deploy 流水线

验证发布到预演环境

任务 5. 将应用提升到生产环境

  • 将应用从预演 (cd-staging) 环境提升到生产 (cd-production) 环境。

提示:别忘了批准部署!

验证发布到生产环境

任务 6. 对应用进行更改并重新部署

  1. 使用编辑器打开 cloud-deploy-tutorials/tutorials/base/web/leeroy-app/ 目录,并修改 app.go 文件。将第 24 行更改为:fmt.Fprintf(w, "leeroooooy app v2!!\n")
  2. 构建应用并将其推送到 Artifact Registry。
  3. 在您之前创建的流水线上创建一个新发布。将发布命名为 web-app-002
  4. 验证新版本已经部署到预演环境中。
gcloud beta deploy rollouts list \ --delivery-pipeline web-app \ --release web-app-002

任务 7. 回滚更改

不会吧!您的质量检查工程师在发布到预演环境的版本中发现了一个 bug,因此您需要回滚到上一个版本。

  1. 使用 Cloud Deploy 回滚到应用的原始版本 - web-app-001
  2. 验证原始版本正在运行。
验证回滚已成功运行

恭喜!

在本实验中,您使用 Google Cloud Deploy 和 Artifact Registry 成功地设置了 CI/CD 流水线。您创建了一个概念验证,满足了管理层的所有要求。Jooli Inc. 现在正凭借应用现代化改造的优势,顺利实现更高的投资回报率!

Google Cloud 上的 CI/CD 徽章

赢得您的下一个技能徽章

本实验是在 Google Cloud 上实现 CI/CD 流水线课程的组成部分。完成此技能徽章课程可赢得上面的徽章,以表彰您取得的成就。您可以在简历和社交平台中分享自己的徽章,并使用 #GoogleCloudBadge 让大家知道您取得的这一成就。

此技能徽章课程是 Google Cloud 的 DevSecOps 学习路线的组成部分。请访问 DevSecOps 学习路线,继续您的学习之旅!

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2025 年 5 月 19 日

上次测试实验的时间:2025 年 5 月 19 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。