arrow_back

在 Google Cloud 中实施 DevOps 工作流:实验室挑战赛

登录 加入
访问 700 多个实验和课程

在 Google Cloud 中实施 DevOps 工作流:实验室挑战赛

实验 1 小时 30 分钟 universal_currency_alt 5 个积分 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP330

Google Cloud 自学实验的徽标

概览

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

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

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

我们建议已报名参加在 Google Cloud 中实施 DevOps 工作流课程的学员参加此实验室挑战赛。准备好接受挑战了吗?

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

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

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

为完成此实验,您需要:

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

前提条件

需要有 GitHub 账号方可完成此实验。如果您已经有账号,可以使用该账号。如果没有,则需要创建 GitHub 账号

挑战场景

几个月前,您加入了 Cymbal Superstore,成为一名 DevOps 工程师。现在,您已了解该公司运营其电子商务网站的各个方面。公司的 DevOps 团队正在开发一个大规模 CI/CD 流水线,他们希望您协助完成构建工作。这样,公司就可以为开发者提供帮助,实现任务自动化、与其他团队进行更有效的协作以及更频繁、更可靠地发布软件。由于 Cymbal Superstore 希望在其流水线中使用所有原生 Google Cloud 服务,因此您在 GitHub、Artifact Registry、Docker 和 Cloud Build 方面的经验有很大的帮助。

Cymbal Superstore 徽标

在您开始此项目之前,DevOps 团队希望您展示一下自己的新技能。在此展示过程中,他们会列出一系列任务,并要求您在沙盒环境中于分配的时间内完成。

您的挑战

您的任务包括:

  • 根据所提供的一组配置创建 GKE 集群。
  • 创建 GitHub 代码库以托管您的 Go 应用代码。
  • 创建用于部署生产和开发应用的 Cloud Build 触发器。
  • 将更新推送到应用并创建新 build。
  • 将生产应用回滚到先前版本。

总的来说,您将使用 GitHub 代码库、Artifact Registry 和 Cloud Build 来创建一个简单的 CI/CD 流水线。

任务 1. 创建实验资源

在本部分中,您将为展示环境初始化 Google Cloud 项目。您需要执行以下操作:启用所需的 API、在 Cloud Shell 中配置 Git、创建 Artifact Registry Docker 仓库和一个 GKE 集群来运行生产和开发应用。

  1. 运行以下命令,为 GKE、Cloud Build 和 GitHub 代码库启用 API:
gcloud services enable container.googleapis.com \ cloudbuild.googleapis.com
  1. 为 Cloud Build 服务账号添加 Kubernetes Developer 角色:
export PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \ --format="value(projectNumber)")@cloudbuild.gserviceaccount.com --role="roles/container.developer"
  1. 在 Cloud Shell 中运行以下命令,配置 Git 和 GitHub:

    curl -sS https://webi.sh/gh | sh gh auth login gh api user -q ".login" GITHUB_USERNAME=$(gh api user -q ".login") git config --global user.name "${GITHUB_USERNAME}" git config --global user.email "${USER_EMAIL}" echo ${GITHUB_USERNAME} echo ${USER_EMAIL}
    • 按 Enter 键接受默认选项。
    • 阅读命令输出中的说明,使用网络浏览器登录 GitHub。

    成功登录后,您的 GitHub 用户名会显示在 Cloud Shell 的输出中。

  2. 区域创建名为 my-repository 的 Artifact Registry Docker 仓库,用于存储容器映像。

  3. 创建名为 hello-cluster 并采用以下配置的 GKE Standard 集群:

设置
可用区
发布渠道 常规
集群版本 1.29 或更高版本
集群自动扩缩程序 已启用
节点数 3
节点数下限 2
节点数上限 6
  1. 在集群上创建 proddev 命名空间。

点击“检查我的进度”以验证是否完成了以下目标:创建实验资源

任务 2. 在 GitHub 代码库中创建一个代码库

在此任务中,您将在 GitHub 代码库中创建一个代码库 sample-app,并使用一些示例代码对其进行初始化。此代码库用于存储您的 Go 应用代码,是触发 build 的主要来源。

  1. 在 GitHub 代码库中创建一个名为 sample-app 的空代码库。

  2. 在 Cloud Shell 中克隆 GitHub 代码库 sample-app

  3. 使用以下命令将示例代码复制到 sample-app 目录中:

cd ~ gsutil cp -r gs://spls/gsp330/sample-app/* sample-app
  1. 运行以下命令,该命令会自动将 cloudbuild-dev.yamlcloudbuild.yaml 文件中的 <your-region><your-zone> 占位符替换为您项目的已分配区域和可用区:
export REGION="{{{project_0.default_region | REGION}}}" export ZONE="{{{project_0.default_zone | ZONE}}}" for file in sample-app/cloudbuild-dev.yaml sample-app/cloudbuild.yaml; do sed -i "s/<your-region>/${REGION}/g" "$file" sed -i "s/<your-zone>/${ZONE}/g" "$file" done
  1. 创建一个名为 sample-app 的 GitHub 代码库

  2. 创建代码库后,使用添加到 sample-app 目录中的示例代码进行首次提交,然后将更改推送到 master 分支。

  3. 创建一个名为 dev 的分支。使用添加到 sample-app 目录中的示例代码进行提交,然后将更改推送到 dev 分支。

  4. 验证您已将示例代码和分支存储在 GitHub 代码库中。

包含分支的源代码库

您刚刚克隆的代码包含一个简单的 Go 应用,该应用有两个入口点:Red 和 Blue。每个入口点都会在网页上显示一个简单的彩色方块,具体取决于您前往的入口点。

任务 3. 创建 Cloud Build 触发器

在本部分中,您将创建两个 Cloud Build 触发器。

  • 第一个触发器用于监听 master 分支上的更改,构建应用的 Docker 映像并将其推送到 Google Artifact Registry,然后将该映像的最新版本部署到 GKE 集群中的 prod 命名空间。

  • 第二个触发器用于监听 dev 分支上的更改,构建应用的 Docker 映像并将其推送到 Google Artifact Registry,然后将该映像的最新版本部署到 GKE 集群中的 dev 命名空间。

  1. 创建名为 sample-app-prod-deploy 并采用以下配置的 Cloud Build 触发器:

    • 事件:推送到分支
    • 来源:
      • 连接到新代码库并选择源代码管理服务提供方:GitHub(Cloud Build GitHub 应用)
      • 选择 GitHub 代码库:sample-app
    • 分支:^master$
    • Cloud Build 配置文件:cloudbuild.yaml
  2. 创建名为 sample-app-dev-deploy 并采用以下配置的 Cloud Build 触发器:

    • 事件:推送到分支
    • 来源:选择 GitHub 代码库:sample-app
    • 分支:^dev$
    • Cloud Build 配置文件:cloudbuild-dev.yaml

设置触发器后,对分支所做的任何更改都会触发相应的 Cloud Build 流水线,该流水线会按照 cloudbuild.yaml 文件中指定的方式构建和部署应用。

点击“检查我的进度”以验证是否完成了以下目标:创建 Cloud Build 触发器

任务 4. 部署应用的第一个版本

在本部分中,您将构建生产应用和开发应用的第一个版本。

构建第一个开发部署

  1. 在 Cloud Shell 中,检查位于 sample-app 目录中的 cloudbuild-dev.yaml 文件,查看构建流程中的各个步骤。在 cloudbuild-dev.yaml 文件中,将第 9 行和第 13 行的 <version> 替换为 v1.0

  2. 找到 dev/deployment.yaml 文件,并使用正确的容器映像名称更新第 17 行中的 <todo>。此外,将容器映像名称中的 PROJECT_ID 变量替换为实际的项目 ID。

注意:请确保您在 dev/deployment.yamlcloudbuild-dev.yaml 文件中有相同的容器映像名称。
  1. 提交您对 dev 分支的更改,并推送更改以触发 sample-app-dev-deploy 构建作业。

  2. Cloud Build 历史记录页面中验证您的 build 已成功执行,并验证 development-deployment 应用已部署到集群的 dev 命名空间。

  3. 在端口 8080 上将 development-deployment 部署公开给名为 dev-deployment-serviceLoadBalancer 服务,并将容器的目标端口设置为 Dockerfile 中指定的端口。

  4. 找到服务的负载均衡器 IP,然后在网址末尾添加 /blue 入口点,以验证应用已启动并正常运行。修改后的网址应该类似于以下内容:http://34.135.97.199:8080/blue

构建第一个生产部署

  1. 切换到 master 分支。检查位于 sample-app 目录中的 cloudbuild.yaml 文件,查看构建流程中的各个步骤。在 cloudbuild.yaml 文件中,将第 11 行第 16 行中的 <version> 替换为 v1.0

  2. 找到 prod/deployment.yaml 文件,并使用正确的容器映像名称更新第 17 行中的 <todo>。此外,将容器映像名称中的 PROJECT_ID 变量替换为实际的项目 ID。

注意:请确保您在 prod/deployment.yamlcloudbuild.yaml 文件中有相同的容器映像名称。
  1. 提交您对 master 分支的更改,并推送更改以触发 sample-app-prod-deploy 构建作业。

  2. Cloud Build 历史记录页面中验证您的 build 已成功执行,并验证 production-deployment 应用已部署到集群的 prod 命名空间。

  3. 在端口 8080 上将 prod 命名空间中的 production-deployment 部署公开给名为 prod-deployment-serviceLoadBalancer 服务,并将容器的目标端口设置为 Dockerfile 中指定的端口。

  4. 找到服务的负载均衡器 IP,然后在网址末尾添加 /blue 入口点,以验证应用已启动并正常运行。修改后的网址应该类似于以下内容:http://34.135.245.19:8080/blue

点击“检查我的进度”以验证是否完成了以下目标:部署应用的第一个版本

任务 5. 部署应用的第二个版本

在本部分中,您将构建生产应用和开发应用的第二个版本。

构建第二个开发部署

  1. 切换回 dev 分支。
注意:在继续操作之前,请确保您位于 dev 分支,以便针对 dev 环境创建部署。
  1. main.go 文件中,将 main() 函数更新为以下内容:
func main() { http.HandleFunc("/blue", blueHandler) http.HandleFunc("/red", redHandler) http.ListenAndServe(":8080", nil) }
  1. main.go 文件中添加以下函数:
func redHandler(w http.ResponseWriter, r *http.Request) { img := image.NewRGBA(image.Rect(0, 0, 100, 100)) draw.Draw(img, img.Bounds(), &image.Uniform{color.RGBA{255, 0, 0, 255}}, image.ZP, draw.Src) w.Header().Set("Content-Type", "image/png") png.Encode(w, img) }
  1. 检查 cloudbuild-dev.yaml 文件,查看构建流程中的各个步骤。将 Docker 映像的版本更新为 v2.0

  2. 找到 dev/deployment.yaml 文件,并将容器映像名称更新为新版本 (v2.0)。

  3. 提交您对 dev 分支的更改,并推送更改以触发 sample-app-dev-deploy 构建作业。

  4. Cloud Build 历史记录页面中验证您的 build 已成功执行,并验证 development-deployment 应用已部署到集群的 dev 命名空间且正在使用 v2.0 映像。

  5. 找到服务的负载均衡器 IP,然后在网址末尾添加 /red 入口点,以验证应用已启动并正常运行。修改后的网址应类似于以下内容:http://34.135.97.199:8080/red

注意:更新可能需要几分钟才能传播到负载均衡器。

构建第二个生产部署

  1. 切换到 master 分支。
注意:在继续操作之前,请确保您位于 master 分支,以便针对 master 环境创建部署。
  1. main.go 文件中,将 main() 函数更新为以下内容:
func main() { http.HandleFunc("/blue", blueHandler) http.HandleFunc("/red", redHandler) http.ListenAndServe(":8080", nil) }
  1. main.go 文件中添加以下函数:
func redHandler(w http.ResponseWriter, r *http.Request) { img := image.NewRGBA(image.Rect(0, 0, 100, 100)) draw.Draw(img, img.Bounds(), &image.Uniform{color.RGBA{255, 0, 0, 255}}, image.ZP, draw.Src) w.Header().Set("Content-Type", "image/png") png.Encode(w, img) }
  1. 检查 cloudbuild.yaml 文件,查看构建流程中的各个步骤。将 Docker 映像的版本更新为 v2.0

  2. 找到 prod/deployment.yaml 文件,并将容器映像名称更新为新版本 (v2.0)。

  3. 提交您对 master 分支的更改,并推送更改以触发 sample-app-prod-deploy 构建作业。

  4. Cloud Build 历史记录页面中验证您的 build 已成功执行,并验证 production-deployment 应用已部署到集群的 prod 命名空间且正在使用 v2.0 映像。

  5. 找到服务的负载均衡器 IP,然后在网址末尾添加 /red 入口点,以验证应用已启动并正常运行。修改后的网址应该类似于以下内容:http://34.135.245.19:8080/red

注意:更新可能需要几分钟才能传播到负载均衡器。

太棒了!您已成功创建能够正常运行的生产和开发 CI/CD 流水线。

点击“检查我的进度”以验证是否完成了以下目标:部署应用的第二个版本

任务 6. 回滚生产部署

在本部分中,您需要将生产部署回滚到之前的版本。

  1. 回滚 production-deployment 以使用应用的 v1.0 版本。
提示:利用 Cloud Build 历史记录,您可以轻松进行回滚/使用先前版本重新构建部署。
  1. 找到服务的负载均衡器 IP,然后在生产部署的网址末尾添加 /red 入口点,页面上的响应应为 404

点击“检查我的进度”以验证是否完成了以下目标:回滚生产部署

恭喜!

恭喜!在本挑战赛中,您证明了自己在 Google Cloud 中实施 DevOps 工作流的技能。您首先创建了一个 GKE 集群来运行您的应用,并创建了一个 Git 代码库来托管您的代码库。然后,您创建了 Cloud Build 触发器,修改了代码和模板,并将更新推送到创建了您的第一个开发和生产应用 build 的代码库。接下来,您将更新推送到应用以创建新 build,并将生产应用回滚到之前的版本。现在,您可以开始在自己的环境中开展 DevOps 工作了!

“实施 DevOps 工作流”技能徽章

赢得您的下一个技能徽章

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

此技能徽章课程是 Google Cloud 的云 DevOps 工程师学习路线的组成部分。您可以报名参加使用 Google Cloud Observability 进行监控和记录课程,以继续深入学习。

Google Cloud 培训和认证

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

本手册的最后更新时间:2024 年 6 月 26 日

本实验的最后测试时间:2024 年 6 月 26 日

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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