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 工作流程課程的學員。準備好迎接挑戰了嗎?

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

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

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

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

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

事前準備

這個實驗室需要 GitHub 帳戶才能完成。您可以使用現有的帳戶,如果沒有,則需建立 GitHub 帳戶

挑戰情境

幾個月前,您開始在 Cymbal Superstore 擔任 DevOps 工程師,如今已瞭解公司電子商務網站的運作細節。具體來說,DevOps 團隊正在建構大規模的 CI/CD pipeline,希望能獲得您的協助。有了這個 pipeline,公司就能幫助開發人員將工作自動化、提升與其他團隊的合作效率,並更頻繁可靠地發布軟體。Cymbal Superstore 希望能完全使用原生的 Google Cloud 服務建構 pipeline,您在 GitHub、Artifact Registry、Docker 和 Cloud Build 的經驗會很有幫助。

Cymbal Superstore 標誌

在開始這項專案前,DevOps 團隊想先請您展現新技能。為此他們列出了一張工作清單,希望您在沙箱環境和規定的時間內完成。

您的挑戰

要完成的工作如下:

  • 根據提供的設定建立 GKE 叢集。
  • 建立 GitHub 存放區,以便託管 Go 應用程式程式碼。
  • 建立 Cloud Build 觸發條件,以便部署正式版和開發版應用程式。
  • 將更新內容推送至應用程式並建立新版本。
  • 將正式版應用程式復原至前一個版本。

整體而言,您會使用 GitHub 存放區、Artifact Registry 和 Cloud Build 建立簡單的 CI/CD pipeline。

工作 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 開發人員角色:
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 命名空間。

點選「Check my progress」,確認目標已達成。建立實驗室資源

工作 2:在 GitHub 存放區建立存放區

在這項工作中,您會在 GitHub 存放區建立名為 sample-app 的存放區,並使用程式碼範例加以初始化。這個存放區會用來保存 Go 應用程式程式碼,也是觸發建構作業的主要來源。

  1. 在 GitHub 存放區建立名為 sample-app 的空存放區。

  2. 在 Cloud Shell 複製 sample-app GitHub 存放區。

  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. 建立 GitHub 存放區並命名為 sample-app

  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 App)
      • 選取 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 pipeline,接著該 pipeline 就會根據 cloudbuild.yaml 檔案建構及部署應用程式。

點選「Check my progress」,確認目標已達成。建立 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 的「記錄」頁面確認建構作業已順利執行,接著確認 development-deployment 應用程式已部署到叢集的 dev 命名空間。

  3. 在通訊埠 8080 向名為 dev-deployment-serviceLoadBalancer 服務公開 development-deployment 部署項目,並將容器的目標通訊埠,設為 Dockerfile 內指定的通訊埠。

  4. 前往該服務的負載平衡器 IP,並在網址結尾加上 /blue 進入點,確認應用程式已開始運作。網址應與以下類似:http://34.135.97.199:8080/blue

建構第一個正式版部署項目

  1. 改為前往 master 分支版本。查看 sample-app 目錄中的 cloudbuild.yaml 檔案,瞭解建構程序的各個步驟。將 cloudbuild.yaml 檔案第 1116 行程式碼的 <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 的「記錄」頁面確認建構作業已順利執行,接著確認 production-deployment 應用程式已部署到叢集的 prod 命名空間。

  3. 在通訊埠 8080 向名為 prod-deployment-serviceLoadBalancer 服務公開 prod 命名空間的 production-deployment 部署項目,並依 Dockerfile 的指定內容,設定容器的目標通訊埠。

  4. 前往該服務的負載平衡器 IP,並在網址結尾加上 /blue 進入點,確認應用程式已開始運作。網址應與以下類似:http://34.135.245.19:8080/blue

點選「Check my progress」,確認目標已達成。部署應用程式的最初版本

工作 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 的「記錄」頁面確認建構作業已順利執行,接著確認 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 的「記錄」頁面確認建構作業已順利執行,接著確認 production-deployment 應用程式已部署到叢集的 prod 命名空間,且使用的是 v2.0 映像檔。

  5. 前往該服務的負載平衡器 IP,並在網址結尾加上 /red 進入點,確認應用程式已開始運作。網址應如下所示:http://34.135.245.19:8080/red

注意:更新內容會在幾分鐘內套用至負載平衡器。

太好了!您已成功為正式版和開發版應用程式建立運作正常的 CI/CD 管道。

點選「Check my progress」,確認目標已達成。部署應用程式的第二個版本

工作 6:復原正式版部署項目

在這個部分中,您會將正式版部署項目復原至前一個版本。

  1. 復原 production-deployment,以使用應用程式的 v1.0 版本。
提示:只要使用 Cloud 建構作業記錄,就能輕鬆運用先前的版本復原/重新建構部署項目。
  1. 前往該服務的負載平衡器 IP,並在正式版部署項目的網址結尾加上 /red 進入點。頁面應會顯示 404

點選「Check my progress」,確認目標已達成。復原正式版部署項目

恭喜!

恭喜!您在這個實驗室中證明了自己的技能,順利在 Google Cloud 實作開發運作工作流程。您首先建立了用於執行應用程式的 GKE 叢集,以及用於託管程式碼集的 git 存放區。接著您建立 Cloud Build 觸發條件、修改程式碼和範本,並將更新內容推送至存放區,在該處建立了開發版和正式版應用程式的最初版本。您也將更新內容推送至應用程式以建立新版本,再將正式版應用程式復原至前一個版本。您現在已準備好在自己的環境進行開發運作工作了!

「實作 DevOps 工作流程」技能徽章

取得下一枚技能徽章

這個自學實驗室是在 Google Cloud 實作 DevOps 工作流程課程的一部分。完成這個技能徽章課程即可獲得上方的徽章,表彰您的成就。您可以在履歷表和社群平台張貼徽章,並加上 #GoogleCloudBadge 公開這項成就。

這個技能徽章課程是 Google Cloud 雲端開發運作工程師學習路徑的一部分。您可以報名 Monitor and Log with Google Cloud Observability 課程,繼續精進專業能力。

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

手冊上次更新日期:2024 年 6 月 26 日

實驗室上次測試日期:2024 年 6 月 26 日

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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