GSP393

概览
在实验室挑战赛中,我们会为您提供一个场景和一系列任务。您将使用从课程的各个实验中学到的技能自行确定如何完成这些任务,而不是按照分步说明进行操作。自动评分系统(显示在本页面中)会提供有关您是否已正确完成任务的反馈。
在您参加实验室挑战赛期间,我们不会再教授新的 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。
- 分配经济实惠的资源容量。各个项目会受到监控,过度使用资源会导致其所属的项目终止(可能包括您的项目),因此请务必仔细规划。这是监控团队愿意与您分享的指南:除非另有指示,否则请使用默认机器类型。
您的挑战
您刚坐在办公桌前并打开新笔记本电脑,就收到了完成以下一系列任务的请求。祝您好运!
- 准备工作 - 启用 API、创建 GKE 集群并在 Artifact Registry 中创建 Docker 代码库。
- 克隆源代码、构建映像并推送到 Artifact Registry。
- 创建交付流水线、目标和发布。
- 重新构建并推送映像,使用“latest”标记。
- 使用最新发布来创建新版本。
- 将最新发布提升到第二个集群。
- 回滚对第二个集群的更改,进行修改,然后重新发布。
任务 1. 准备工作 - 设置环境、启用 API 并创建集群
- 为您的项目 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
- 使用以下命令在 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
- 使用以下命令为 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"
- 创建一个 Cloud Storage 存储桶,供 Cloud Build 存储源代码和日志。
gsutil mb -p $PROJECT_ID gs://${PROJECT_ID}_cloudbuild
- 创建 Artifact Registry 代码库
创建一个用于存储 Docker 容器的代码库。
将代码库命名为 cicd-challenge
gcloud artifacts repositories create cicd-challenge \
--description="Image registry for tutorial web app" \
--repository-format=docker \
--location=$REGION
- 创建 Google Kubernetes Engine 集群。
创建两个 GKE 集群,分别用于预演和生产环境,并命名为 cd-staging 和 cd-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. 构建映像并上传到代码库
- 使用以下命令将实验代码库克隆到您的主目录:
cd ~/
git clone https://github.com/GoogleCloudPlatform/cloud-deploy-tutorials.git
cd cloud-deploy-tutorials
git checkout c3cae80 --quiet
cd tutorials/base
- 使用以下命令创建 skaffold.yaml 配置:
envsubst < clouddeploy-config/skaffold.yaml.template > web/skaffold.yaml
cat web/skaffold.yaml
现在,web 目录包含 skaffold.yaml 配置文件,其中提供了 Skaffold 构建应用容器映像所需的说明。
- 运行 skaffold 命令来构建应用,并将容器映像部署到之前创建的 Artifact Registry 代码库。
提示:使用您之前创建的代码库的完整路径
cd web
skaffold build --interactive=false \
--default-repo <INSERT YOUR ARTIFACT REPOSITORY HERE> \
--file-output artifacts.json
cd ..
验证容器已创建并添加到代码库
任务 3.
创建交付流水线
运行以下命令以复制流水线模板文件:
- 使用 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
-
使用
deploy/region 配置参数来设置部署区域。
-
使用
gcloud beta deploy 命令应用您在上面创建的流水线配置
- 使用以下命令验证交付流水线已经创建:
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
创建交付流水线目标
- 使用以下命令为每个目标创建一个目标定义文件(无需更改):
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
- 将目标文件应用到 Cloud Deploy。
目标在 yaml 文件中定义。每个目标都会配置该目标相关的集群信息。
显示预演目标的相关详细信息:
cat clouddeploy-config/target-cd-staging.yaml
验证 Cloud Deploy 目标已经创建。
任务 4. 创建发布
- 使用
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

验证发布到预演环境
任务 5. 将应用提升到生产环境
- 将应用从预演 (cd-staging) 环境提升到生产 (cd-production) 环境。
提示:别忘了批准部署!
验证发布到生产环境
任务 6. 对应用进行更改并重新部署
- 使用编辑器打开
cloud-deploy-tutorials/tutorials/base/web/leeroy-app/ 目录,并修改 app.go 文件。将第 24 行更改为:fmt.Fprintf(w, "leeroooooy app v2!!\n")
-
构建应用并将其推送到 Artifact Registry。
-
在您之前创建的流水线上创建一个新发布。将发布命名为
web-app-002
- 验证新版本已经部署到预演环境中。
gcloud beta deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-002
任务 7. 回滚更改
不会吧!您的质量检查工程师在发布到预演环境的版本中发现了一个 bug,因此您需要回滚到上一个版本。
-
使用 Cloud Deploy 回滚到应用的原始版本 -
web-app-001
- 验证原始版本正在运行。
验证回滚已成功运行
恭喜!
在本实验中,您使用 Google Cloud Deploy 和 Artifact Registry 成功地设置了 CI/CD 流水线。您创建了一个概念验证,满足了管理层的所有要求。Jooli Inc. 现在正凭借应用现代化改造的优势,顺利实现更高的投资回报率!

赢得您的下一个技能徽章
本实验是在 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 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。