arrow_back

使用 Cloud Build 建立 Google Kubernetes Engine 管道

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

使用 Cloud Build 建立 Google Kubernetes Engine 管道

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

GSP1077

Google Cloud 自學實驗室標誌

總覽

在本研究室中,您將建立 CI/CD 管道,從已提交的程式碼自動建構容器映像檔、將該映像檔儲存到 Artifact Registry、更新 Git 存放區中的 Kubernetes 資訊清單,並使用該清單將應用程式部署到 Google Kubernetes Engine。

CI/CD 流程

在本研究室中,您將建立 2 個 Git 存放區:

  • app 存放區:包含應用程式本身的原始碼
  • env 存放區:包含 Kubernetes Deployment 的資訊清單

當您將變更推送到 app 存放區時,Cloud Build 管道會執行測試、建構容器映像檔,並將該映像檔推送到 Artifact Registry。推送映像檔後,Cloud Build 會更新 Deployment 資訊清單,再將該清單推送到 env 存放區。這會觸發另一個 Cloud Build 管道,將資訊清單套用到 GKE 叢集,並在套用成功後,將清單儲存到 env 存放區的其他分支版本。

之所以將 app 和 env 區隔開來,是因為這兩個存放區有不同的生命週期和用途。app 存放區的主要使用者是人,專用於特定應用程式。env 存放區的主要使用者是 Cloud Build 等自動化系統,可能由多個應用程式共用。env 存放區可以有多個分支版本,每個版本都會對應到特定環境 (本研究室中只會使用正式環境),並參照特定的容器映像檔,而 app 存放區則沒有。

完成本研究室後,您將能在系統中輕鬆執行下列工作:

  • 查看 Cloud Build 記錄來區分失敗和成功的部署作業。
  • 查看 env 存放區的 production 分支版本,存取目前使用的資訊清單。
  • 重新執行對應的 Cloud Build 建構作業,復原到先前的任何版本。

Git 作業流程

目標

本研究室將說明如何執行下列工作:

  • 建立 Kubernetes Engine 叢集
  • 建立 Cloud Source Repositories
  • 從 Cloud Source Repositories 觸發 Cloud Build
  • 透過 Cloud Build 自動測試並發布可部署的容器映像檔
  • 透過 Cloud Build 管理 Kubernetes Engine 叢集中部署的資源

設定和需求

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

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

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

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

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

如何開始研究室及登入 Google Cloud 控制台

  1. 點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username。

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password。

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

  2. 系統顯示視窗時,請按照下列步驟操作:

    • 繼續操作 Cloud Shell 視窗。
    • 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。

連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID。輸出內容中有一行文字,宣告本工作階段的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

輸出內容:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南

工作 1:初始化研究室

  1. 在 Cloud Shell 設定專案 ID 和專案編號,分別儲存為 PROJECT_IDPROJECT_NUMBER 變數:
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 專案,包含下列操作:啟用必要的 API、在 Cloud Shell 初始化 Git 設定,並下載本研究室中稍後會用到的程式碼範例。

  1. 執行下列指令,啟用 GKE、Cloud Build、Cloud Source Repositories 和 Container Analysis API:
gcloud services enable container.googleapis.com \ cloudbuild.googleapis.com \ sourcerepo.googleapis.com \ containeranalysis.googleapis.com
  1. 區域建立 Artifact Registry Docker 存放區並命名為 my-repository,用於儲存容器映像檔:
gcloud artifacts repositories create my-repository \ --repository-format=docker \ --location=$REGION
  1. 建立 GKE 叢集,用於部署本研究室的範例應用程式:
gcloud container clusters create hello-cloudbuild --num-nodes 1 --region $REGION
  1. 如果從未在 Cloud Shell 用過 Git,請使用您的姓名和電子郵件地址設定 Git。日後您在 Cloud Shell 建立修訂版本時,Git 會使用這些資訊指出您是作者 (如果沒有 GitHub 帳戶,則填入現有的資訊即可,這不是本研究室的必要項目):
git config --global user.email "you@example.com" git config --global user.name "Your Name"

點選「Check my progress」,確認目標已達成。 啟用服務、建立 Artifact Registry 和 GKE 叢集

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

在這項工作中,您將建立兩個 Git 存放區 (hello-cloudbuild-apphello-cloudbuild-env),並運用一些程式碼範例初始化 hello-cloudbuild-app

  1. 在 Cloud Shell 執行下列指令,建立兩個 Git 存放區:
gcloud source repos create hello-cloudbuild-app gcloud source repos create hello-cloudbuild-env
  1. 從 GitHub 複製程式碼範例:
cd ~ git clone https://github.com/GoogleCloudPlatform/gke-gitops-tutorial-cloudbuild hello-cloudbuild-app
  1. 將 Cloud Source Repositories 設為遠端存放區:
cd ~/hello-cloudbuild-app export REGION={{{project_0.default_region | "REGION"}}} sed -i "s/us-central1/$REGION/g" cloudbuild.yaml sed -i "s/us-central1/$REGION/g" cloudbuild-delivery.yaml sed -i "s/us-central1/$REGION/g" cloudbuild-trigger-cd.yaml sed -i "s/us-central1/$REGION/g" kubernetes.yaml.tpl PROJECT_ID=$(gcloud config get-value project) git remote add google "https://source.developers.google.com/p/${PROJECT_ID}/r/hello-cloudbuild-app"

剛剛複製的程式碼包含一個簡易的「Hello World」應用程式。

from flask import Flask app = Flask('hello-cloudbuild') @app.route('/') def hello(): return "Hello World!\n" if __name__ == '__main__': app.run(host = '0.0.0.0', port = 8080)

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

工作 3:使用 Cloud Build 建立容器映像檔

複製的程式碼已包含下列 Dockerfile。

FROM python:3.7-slim RUN pip install flask WORKDIR /app COPY app.py /app/app.py ENTRYPOINT ["python"] CMD ["/app/app.py"]

運用此 Dockerfile,就能使用 Cloud Build 建立容器映像檔,並儲存到 Artifact Registry。

  1. 在 Cloud Shell 執行下列指令,根據最新的修訂版本建立 Cloud Build 建構作業:
cd ~/hello-cloudbuild-app COMMIT_ID="$(git rev-parse --short=7 HEAD)" gcloud builds submit --tag="${REGION}-docker.pkg.dev/${PROJECT_ID}/my-repository/hello-cloudbuild:${COMMIT_ID}" .

執行此指令時,Cloud Build 會將建立容器映像檔時產生的記錄檔串流到終端機。

  1. 建構完成後,前往 Cloud 控制台依序點選「Artifact Registry」>「存放區」,確認 Artifact Registry 中有新的容器映像檔。點選「my-repository」

Artifact Registry

點選「Check my progress」,確認目標已達成。 使用 Cloud Build 建立容器映像檔

工作 4:建立持續整合 (CI) 管道

在這項工作中,您將設定 Cloud Build 自動執行小型單元測試、建構容器映像檔,然後推送到 Artifact Registry。將新的修訂版本推送到 Cloud Source Repositories 會自動觸發此管道。程式碼中的 cloudbuild.yaml 檔案是管道的設定。

架構

  1. 前往 Cloud 控制台,依序點選「Cloud Build」>「觸發條件」
  2. 點選「建立觸發條件」
  3. 在「Name」欄位中,輸入 hello-cloudbuild
  4. 在「事件」下方,選取「推送至分支版本」
  5. 在「來源」下方,將「存放區」設為「hello-cloudbuild-app」,並將「分支版本」設為 .* (any branch)
  6. 在「建構設定」下方,選取「Cloud Build 設定檔」
  7. 在「Cloud Build 設定檔位置」欄位中,在 / 後面輸入 cloudbuild.yaml
  8. 點選「建立」

建立觸發條件

建立觸發條件後,請返回 Cloud Shell。現在需要將應用程式程式碼推送到 Cloud Source Repositories,以觸發 Cloud Build 中的 CI 管道。

  1. 執行下列指令,開始這項觸發作業:
cd ~/hello-cloudbuild-app git add . git commit -m "Type Any Commit Message here" git push google master
  1. 前往 Cloud 控制台,依序點選「Cloud Build」>「資訊主頁」

  2. 您應該會看到執行中或最近完成的建構作業。您可以點選該建構作業,追蹤執行情況並查看記錄檔。

資訊主頁

點選「Check my progress」,確認目標已達成。 建立持續整合 (CI) 管道

工作 5:建立測試環境和 CD 管道

Cloud Build 也會用於持續推送軟體更新管道。每次將修訂版本推送到 hello-cloudbuild-env 存放區的 candidate 分支版本時,管道都會開始運作。管道會將新版資訊清單套用到 Kubernetes 叢集,並在套用成功後,將清單複製到 production 分支版本。這項程序具有下列屬性:

  • candidate 分支版本是嘗試部署記錄。
  • production 分支版本是成功部署記錄。
  • 您可以查看 Cloud Build 中成功和失敗的部署作業。
  • 您可以復原到先前部署的任何版本,只要重新執行對應的 Cloud Build 建構作業即可。復原作業也會更新 production 分支版本,真實反映部署記錄。

接著請修改持續整合管道,更新 hello-cloudbuild-env 存放區的 candidate 分支版本,觸發持續推送軟體更新管道。

將 GKE 存取權授予 Cloud Build

如要在 Kubernetes 叢集部署應用程式,Cloud Build 需要 Kubernetes Engine 開發人員 Identity and Access Management 角色。

  1. 在 Cloud Shell 執行下列指令:
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')" gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \ --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role=roles/container.developer

您需要使用兩個分支版本 (production 和 candidate) 和描述部署程序的 Cloud Build 設定檔,將 hello-cloudbuild-env 存放區初始化。

第一步是複製 hello-cloudbuild-env 存放區並建立 production 分支版本。存放區仍是空的。

  1. 在 Cloud Shell 執行下列指令:
cd ~ gcloud source repos clone hello-cloudbuild-env cd ~/hello-cloudbuild-env git checkout -b production
  1. 接著請複製 hello-cloudbuild-app 存放區中的 cloudbuild-delivery.yaml 檔案並提交變更:
cd ~/hello-cloudbuild-env cp ~/hello-cloudbuild-app/cloudbuild-delivery.yaml ~/hello-cloudbuild-env/cloudbuild.yaml git add . git commit -m "Create cloudbuild.yaml for deployment"

cloudbuild-delivery.yaml 檔案描述了要在 Cloud Build 執行的部署程序,其中有兩個步驟:

  • Cloud Build 對 GKE 叢集套用資訊清單。
  • 如果套用成功,Cloud Build 會將資訊清單複製到 production 分支版本。
  1. 建立 candidate 分支版本,並將兩個分支版本推送到 Cloud Source Repositories:
git checkout -b candidate git push origin production git push origin candidate
  1. 將原始碼存放區寫入者 IAM 角色授予 hello-cloudbuild-env 存放區的 Cloud Build 服務帳戶:
PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} \ --format='get(projectNumber)')" cat >/tmp/hello-cloudbuild-env-policy.yaml <<EOF bindings: - members: - serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com role: roles/source.writer EOF gcloud source repos set-iam-policy \ hello-cloudbuild-env /tmp/hello-cloudbuild-env-policy.yaml

為持續推送軟體更新管道建立觸發條件

  1. 前往 Cloud 控制台,依序點選「Cloud Build」>「觸發條件」
  2. 點選「建立觸發條件」
  3. 在「Name」欄位中,輸入 hello-cloudbuild-deploy
  4. 在「事件」下方,選取「推送至分支版本」
  5. 在「來源」下方,將「存放區」設為「hello-cloudbuild-env」,並將「分支版本」設為 ^candidate$
  6. 在「建構設定」下方,選取「Cloud Build 設定檔」
  7. 在「Cloud Build 設定檔位置」欄位中,在 / 後面輸入 cloudbuild.yaml
  8. 點選「建立」

建立觸發條件

修改持續整合管道,觸發持續推送軟體更新管道

接著為持續整合管道新增一些步驟,以產生新版 Kubernetes 資訊清單,並推送到 hello-cloudbuild-env 存放區,觸發持續推送軟體更新管道。

  1. 複製 app 存放區cloudbuild.yaml 檔案擴充版本:
cd ~/hello-cloudbuild-app cp cloudbuild-trigger-cd.yaml cloudbuild.yaml

cloudbuild-trigger-cd.yamlcloudbuild.yaml 檔案的擴充版本。該版本新增的步驟如下:產生新的 Kubernetes 資訊清單,並觸發持續推送軟體更新管道。

此管道使用簡單的 sed 來轉譯資訊清單範本。實際上,使用 kustomize 或 skaffold 等專用工具也有一些好處。比如說,您可以進一步控制資訊清單範本的轉譯作業。
  1. 提交修改內容並推送到 Cloud Source Repositories:
cd ~/hello-cloudbuild-app git add cloudbuild.yaml git commit -m "Trigger CD pipeline" git push google master

這會觸發 Cloud Build 中的持續整合管道。

點選「Check my progress」,確認目標已達成。 建立測試環境和 CD 管道

工作 6:查看 Cloud Build 管道

  1. 前往 Cloud 控制台,依序點選「Cloud Build」>「資訊主頁」
  2. 點選 hello-cloudbuild-app 觸發條件,追蹤執行情況並查看記錄檔。此管道的最後一步會將新的資訊清單推送到 hello-cloudbuild-env 存放區,進而觸發持續推送軟體更新管道。

建構記錄

  1. 返回主要的「資訊主頁」
  2. 您應該會看到 hello-cloudbuild-env 存放區的執行中或最近完成的建構作業。您可以點選該建構作業,追蹤執行情況並查看記錄檔。

Cloud Build 資訊主頁

工作 7:測試完整管道

完整的 CI/CD 管道現已設定完畢,請從頭到尾測試一次。

  1. 前往 Cloud 控制台,依序點選「Kubernetes Engine」>「閘道、Service 與 Ingress」

清單中應該有一個名為 hello-cloudbuild 的服務,這是由剛剛執行的持續推送軟體更新建構作業所建立。

  1. 點選 hello-cloudbuild 服務的端點後,您應該會看到「Hello World!」。如果沒有端點,或是看到負載平衡器錯誤,可能必須等待幾分鐘,負載平衡器才會完全初始化。視需要點選「重新整理」來更新頁面。

應用程式 1 Hello World!

  1. 在 Cloud Shell 執行下列指令,將應用程式和單元測試中的「Hello World」換成「Hello Cloud Build」:
cd ~/hello-cloudbuild-app sed -i 's/Hello World/Hello Cloud Build/g' app.py sed -i 's/Hello World/Hello Cloud Build/g' test_app.py
  1. 提交變更並推送到 Cloud Source Repositories:
git add app.py test_app.py git commit -m "Hello Cloud Build" git push google master
  1. 這會觸發完整的 CI/CD 管道。

幾分鐘後,在瀏覽器中重新載入應用程式。現在應該會看到「Hello Cloud Build!」。

應用程式 2 Hello Cloud Build!

工作 8:測試復原作業

這項工作會將應用程式復原到顯示「Hello World!」的版本。

  1. 前往 Cloud 控制台,依序點選「Cloud Build」>「資訊主頁」
  2. hello-cloudbuild-env 存放區的「建構作業記錄」下方,點選「查看全部」連結。
  3. 點選第二新的可用版本。
  4. 點選「再次執行建構作業」

復原成功畫面

建構完成後,在瀏覽器中重新載入應用程式。現在應該會再次看到「Hello World!」。

應用程式 1 Hello World!

恭喜!

您現在可以透過 Cloud Build,在 Google Cloud 上為 GKE 建立及復原持續整合管道了!

Google Cloud 教育訓練與認證

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

使用手冊上次更新日期:2024 年 1 月 26 日

研究室上次測試日期:2024 年 1 月 19 日

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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