GSP393

總覽
在挑戰研究室中,您會在特定情境下完成一系列任務。挑戰研究室不會提供逐步說明,您將運用從課程研究室學到的技巧,自行找出方法完成任務!自動評分系統 (如本頁所示) 將根據您是否正確完成任務來提供意見回饋。
在您完成任務的期間,挑戰研究室不會介紹新的 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 公司標準:
- 如未特別指定,所有資源均須建立於 區域。
- 使用專案預設虛擬私有雲。
- 分配符合成本效益的資源大小。專案會受到監控。如果超量使用資源,該項資源所屬的專案就會終止,您的專案也有可能受到影響,因此請特別留意。監控團隊的指引如下:如未特別指定,請使用預設機型。
您的挑戰
您坐在桌前開啟新筆電,收到了完成下列工作的要求。祝您好運!
- 預備工作:啟用 API、建立 GKE 叢集,以及在 Artifact Registry 建立 Docker 存放區。
- 複製原始碼、建構映像檔,並推送至 Artifact Registry。
- 建立推送管道、目標和發布版本。
- 重新建構並推送映像檔,標記為最新版本。
- 使用最新版本建立新的發布版本。
- 將最新發布版本推送至第二個叢集。
- 復原第二個叢集的變更、修改並重新發布。
工作 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 bucket,供 Cloud Build 儲存來源和記錄。
gsutil mb -p $PROJECT_ID gs://${PROJECT_ID}_cloudbuild
- 建立 Artifact Repository。
建立存放區來儲存 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 configuration 參數設定部署區域。
-
使用
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:復原變更
糟糕!品質確保工程師在您發布至測試環境的版本中發現錯誤,因此您需要復原至先前版本。
-
使用 Cloud Deploy 復原至應用程式的原始版本
web-app-001。
- 確認原始版本正在執行。
確認復原作業已順利執行
恭喜!
在本實驗室中,您已成功使用 Google Cloud Deploy 和 Artifact Registry 設定 CI/CD 管道,並建立概念驗證來滿足管理階層的所有需求。Jooli 公司正藉助應用程式翻新帶來的效益,順利提高投資報酬率。

取得下一枚技能徽章
本實驗室屬於「在 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 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。