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

在 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 管道。
  • 透過推送核准機制,部署至多個環境。
  • 復原部署作業。

設定

瞭解以下事項後,再點選「Start Lab」按鈕

請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。

您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。

為了順利完成這個實驗室,請先確認:

  • 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。

您必須先等候實驗室佈建完成,才能對環境進行任何變更!當實驗室狀態顯示為準備就緒,您就能使用預先設定的必要環境元件。

挑戰情境

您是 Jooli 公司新到職的雲端工程師。新任管理階層決定翻新系統,且認為最好全面汰換舊版系統,改用代管基礎架構及自動化整合與推送管道。因此,他們要求您找出並測試最合適的工具和服務,以達成這個目標。

管理階層最終希望看到可解決下列所有問題的概念驗證:

  • 將容器映像檔存放於安全可靠的儲存庫。
  • 自動掃描容器映像檔,並提供詳細的安全漏洞報告。
  • 在代管基礎架構執行測試網頁應用程式。
  • 將 CI/CD 管道定義為程式碼,以消除人工錯誤。
  • 以可靠簡便的方式,快速部署程式碼並推送至類似正式環境的測試環境,或在必要時復原。

您的職責是協助管理 Jooli 的 Cloud 基礎架構和部署工具。一般工作內容包括佈建專案資源,以及導入新產品和服務,確保 Jooli 公司有效翻新系統並遵循最佳做法。

公司期望您已具備工作所需的技能與知識,因此不會提供逐步指南。

您必須遵守下列幾項 Jooli 公司標準:

  • 如未特別指定,所有資源均須建立於 區域。
  • 使用專案預設虛擬私有雲。
  • 分配符合成本效益的資源大小。專案會受到監控。如果超量使用資源,該項資源所屬的專案就會終止,您的專案也有可能受到影響,因此請特別留意。監控團隊的指引如下:如未特別指定,請使用預設機型。

您的挑戰

您坐在桌前開啟新筆電,收到了完成下列工作的要求。祝您好運!

  1. 預備工作:啟用 API、建立 GKE 叢集,以及在 Artifact Registry 建立 Docker 存放區。
  2. 複製原始碼、建構映像檔,並推送至 Artifact Registry。
  3. 建立推送管道、目標和發布版本。
  4. 重新建構並推送映像檔,標記為最新版本。
  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 bucket,供 Cloud Build 儲存來源和記錄。
gsutil mb -p $PROJECT_ID gs://${PROJECT_ID}_cloudbuild
  1. 建立 Artifact Repository。

建立存放區來儲存 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 configuration 參數設定部署區域。
  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:復原變更

糟糕!品質確保工程師在您發布至測試環境的版本中發現錯誤,因此您需要復原至先前版本。

  1. 使用 Cloud Deploy 復原至應用程式的原始版本 web-app-001
  2. 確認原始版本正在執行。
確認復原作業已順利執行

恭喜!

在本實驗室中,您已成功使用 Google Cloud Deploy 和 Artifact Registry 設定 CI/CD 管道,並建立概念驗證來滿足管理階層的所有需求。Jooli 公司正藉助應用程式翻新帶來的效益,順利提高投資報酬率。

「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 日

Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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