arrow_back

在 Google Cloud 實作開發運作工作流程:挑戰研究室

登录 加入
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

在 Google Cloud 實作開發運作工作流程:挑戰研究室

Lab 1 小时 30 分钟 universal_currency_alt 5 积分 show_chart 中级
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP330

Google Cloud 自修研究室標誌

總覽

在挑戰研究室中,您會在特定情境下完成一系列任務。挑戰研究室不會提供逐步說明,您將運用從課程研究室學到的技巧,自行找出方法完成任務!自動評分系統 (如本頁所示) 將根據您是否正確完成任務來提供意見回饋。

在您完成任務的期間,挑戰研究室不會介紹新的 Google Cloud 概念。您須靈活運用所學技巧,例如變更預設值或詳讀並研究錯誤訊息,解決遇到的問題。

若想滿分達標,就必須在時限內成功完成所有任務!

這個研究室適合報名 Implement DevOps Workflows in Google Cloud 課程的學員。準備好迎接挑戰了嗎?

點選「Start Lab」按鈕前的須知事項

請詳閱以下操作說明。研究室活動會計時,而且中途無法暫停。點選「Start Lab」 後就會開始計時,讓您瞭解有多少時間可以使用 Google Cloud 資源。

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

如要完成這個研究室活動,請先確認:

  • 您可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意:請使用無痕模式或私密瀏覽視窗執行此研究室。這可以防止個人帳戶和學生帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成研究室活動了!別忘了,活動一開始將無法暫停。
注意:如果您擁有個人 Google Cloud 帳戶或專案,請勿用於本研究室,以免產生額外費用。

挑戰情境

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

Cymbal Superstore 標誌

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

您的挑戰

要完成的工作如下:

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

整體而言,您會使用 Cloud Source Repositories、Artifact Registry 和 Cloud Build 建立簡單的 CI/CD 管道。

工作 1:建立研究室資源

在本節中,您會為示範環境初始化 Google Cloud 專案。您將啟用必要 API、在 Cloud Shell 設定 Git、建立 Artifact Registry Docker 存放區,並建立 GKE 叢集來執行正式版和開發版應用程式。

  1. 執行下列指令,啟用 GKE、Cloud Build 和 Cloud Source Repositories 的 API:
gcloud services enable container.googleapis.com \ cloudbuild.googleapis.com \ sourcerepo.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。將 <email> 改為您的研究室電子郵件地址,並將 <name> 改為您的名字。
git config --global user.email <email> git config --global user.name <name>
  1. 區域建立名為 my-repository 的 Artifact Registry Docker 存放區,以儲存容器映像檔。

  2. 建立名為 hello-cluster 的 GKE Standard 叢集,並使用下列設定:

設定
可用區
發布版本 一般
叢集版本 1.29.1-gke.1589020 以上
叢集自動配置器 已啟用
節點數量 3
節點數量下限 2
節點數量上限 6
  1. 在叢集建立 proddev 命名空間。

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

工作 2:在 Cloud Source Repositories 建立存放區

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

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

  2. 在 Cloud Shell 複製 sample-app Cloud 原始碼存放區。

  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 目錄的程式碼範例進行首次修訂,接著將變更內容推送至 master 分支版本。

  2. 建立名為 dev 的分支版本。使用新增至 sample-app 目錄的程式碼範例進行修訂,接著將變更內容推送至 dev 分支版本。

  3. 確認程式碼範例和各分支版本已儲存至原始碼存放區。

存有分支版本的原始碼存放區

您剛才複製的程式碼包含簡單的 Go 應用程式,其中有兩個進入點:Red 和 Blue。每個進入點都會在網頁上會顯示簡單的有色方塊,顯示的顏色取決於您選擇的進入點。

點選「Check my progress」,確認目標已達成。在 Cloud Source Repositories 建立存放區

工作 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 觸發條件:

    • 事件:推送至分支版本
    • 原始碼存放區:sample-app
    • 分支版本:^master$
    • Cloud Build 設定檔:cloudbuild.yaml
  2. 使用下列設定,建立名為 sample-app-dev-deploy 的 Cloud Build 觸發條件:

    • 事件:推送至分支版本
    • 原始碼存放區:sample-app
    • 分支版本:^dev$
    • Cloud Build 設定檔:cloudbuild-dev.yaml

觸發條件設定完成後,分支版本的任何變更都會觸發相應的 Cloud Build 管道,接著該管道就會根據 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 觸發條件、修改程式碼和範本,並將更新內容推送至存放區,在該處建立了開發版和正式版應用程式的最初版本。您也將更新內容推送至應用程式以建立新版本,再將正式版應用程式復原至前一個版本。您現在已準備好在自己的環境進行開發運作工作了!

Implement Devops Workflows 技能徽章

取得下一枚技能徽章

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

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

Google Cloud 教育訓練與認證

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

使用手冊上次更新日期:2024 年 5 月 13 日

研究室上次測驗日期:2024 年 5 月 13 日

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