正在加载…
未找到任何结果。

在 Google Cloud 控制台中运用您的技能

Google Cloud 中的 Kubernetes

访问 700 多个实验和课程

在 Kubernetes Engine 使用 Jenkins 持續推送軟體更新

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

GSP051

總覽

在本實驗室,您將瞭解如何在 Kubernetes Engine 使用 Jenkins 設定持續推送軟體更新管道。開發人員若經常需要將程式碼整合至共用存放區,通常會選用 Jenkins 這款自動化伺服器。您在本實驗室建構的解決方案,架構會與下圖類似:

請前往 Cloud Architecture Center,查看 Jenkins 在 Kubernetes Engine 的運作方式,進一步瞭解如何在 Kubernetes 執行 Jenkins。

課程內容

在本實驗室,您將完成下列工作,瞭解如何在 Kubernetes 執行 Jenkins:

  • 將 Jenkins 應用程式佈建至 Kubernetes Engine 叢集
  • 使用 Helm 套件管理工具設定 Jenkins 應用程式
  • 認識 Jenkins 應用程式的功能
  • 建立並執行 Jenkins 管道

事前準備

本實驗室屬於進階實作活動。開始之前,至少須熟悉殼層程式設計、Kubernetes 和 Jenkins 的基本概念。下列幾個實驗室可協助您快速掌握相關知識:

準備好之後,請向下捲動,進一步瞭解 Kubernetes、Jenkins 和持續推送軟體更新機制。

什麼是 Kubernetes Engine?

Kubernetes Engine 是 Google Cloud 的 Kubernetes 託管版,這套叢集管理與自動化調度管理系統專為容器設計,功能非常強大。Kubernetes 是一個開放原始碼專案,能在多種不同的環境中運作,包括筆記型電腦、高可用性的多節點叢集、虛擬機器和裸機等。如先前所述,Kubernetes 應用程式是以容器為建構基礎,這是一種輕量型應用程式,包含運作所需的所有依附元件和程式庫。正因為採用這種底層結構,Kubernetes 應用程式的可用性和安全性都極高,部署也很快速,對雲端開發人員而言,是理想的架構選擇。

什麼是 Jenkins?

Jenkins 是一套開放原始碼的自動化伺服器,可讓您靈活地自動調度並管理建構、測試和部署管道。透過 Jenkins,開發人員能快速執行專案的疊代作業,不必擔心持續推送軟體更新可能造成的額外負擔。

什麼是持續推送軟體更新/持續部署?

如需設定持續推送軟體更新 (CD) 管道,可選擇將 Jenkins 部署至 Kubernetes Engine,因為這種做法比標準 VM 部署方式更具效益,能帶來許多重要優勢。

如果建構程序使用容器,同一個虛擬主機便可橫跨多個作業系統執行工作。Kubernetes Engine 會提供臨時的建構執行器,只有在建構期間才會使用,這樣資源就能留給批次處理等其他叢集工作。此外,這類執行器還有另一項優點,就是「速度快」,能在幾秒內完成啟動。

Kubernetes Engine 還預先搭載 Google 的全域負載平衡器,可自動將網路流量轉送至執行個體。該負載平衡器會處理 SSL 終止作業,並使用以 Google 骨幹網路設定的全球 IP 位址。如果搭配網站前端,使用者就能透過最快的路徑連至應用程式執行個體。

對於 Kubernetes、Jenkins 及兩者在 CD 管道的互動方式,您已有初步的瞭解,接下來可開始建構了!

設定和需求

瞭解以下事項後,再點選「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」圖示

  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 開啟新的工作階段,然後執行下列指令來設定可用區
gcloud config set compute/zone {{{project_0.default_zone}}}
  1. 複製實驗室的程式碼範例:
gsutil cp gs://spls/gsp051/continuous-deployment-on-kubernetes.zip . unzip continuous-deployment-on-kubernetes.zip
  1. 切換至正確的目錄:
cd continuous-deployment-on-kubernetes

工作 2:佈建 Jenkins

建立 Kubernetes 叢集並啟用 Jenkins,以便存取 GitHub 存放區及 Google Container Registry。

建立 Kubernetes 叢集

  1. 執行下列指令,佈建 Kubernetes 叢集:
gcloud container clusters create jenkins-cd \ --num-nodes 2 \ --machine-type e2-standard-2 \ --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform"

這個步驟會在幾分鐘內完成。額外指定範圍後,Jenkins 就能存取 GitHub 存放區及 Google Container Registry。

點選「Check my progress」,確認工作已完成。如果已成功建立 Kubernetes 叢集,您就會看見評估分數。

建立 Kubernetes 叢集 (可用區:)
  1. 先執行下列指令,確認叢集正在運作,再繼續操作:
gcloud container clusters list

取得叢集憑證

  1. 取得叢集的憑證:
gcloud container clusters get-credentials jenkins-cd
  1. Kubernetes Engine 會使用這些憑證來存取新佈建的叢集。請執行下列指令,確認可連至該叢集:
kubectl cluster-info

工作 3:設定 Helm

Helm 是套件管理工具,協助您輕鬆設定及部署 Kubernetes 應用程式。安裝 Jenkins 後,便可設定 CI/CD 管道。

在這項工作中,您會使用 Helm 從資訊套件存放區安裝 Jenkins。

  1. 新增 Helm 的穩定版資訊套件存放區:
helm repo add jenkins https://charts.jenkins.io
  1. 確保該存放區為最新版本:
helm repo update

工作 4:安裝及設定 Jenkins

安裝 Jenkins 時,可使用 values 做為範本,提供設定所需的值。

您將透過 values 檔案,自動設定 Kubernetes Cloud 並新增下列必要的外掛程式:

  • Kubernetes:latest
  • Workflow-multibranch:latest
  • Git:latest
  • Configuration-as-code:latest
  • Google-oauth-plugin:latest
  • Google-source-plugin:latest
  • Google-storage-plugin:latest

這樣 Jenkins 就能連線至您的叢集和 Google Cloud 專案。

  1. 使用 Helm CLI 來根據設定部署資訊套件:
helm install cd jenkins/jenkins -f jenkins/values.yaml --wait

這個指令會在幾分鐘內執行完畢。

點選「Check my progress」,確認工作已完成。如果已成功設定 Jenkins 資訊套件,您就會看見評估分數。

安裝及設定 Jenkins
  1. 指令執行完畢後,請確認 Jenkins Pod 進入 Running 狀態,且容器處於 READY 狀態:
kubectl get pods

輸出內容範例:

NAME READY STATUS RESTARTS AGE cd-jenkins-7c786475dd-vbhg4 2/2 Running 0 1m
  1. 設定 Jenkins 服務帳戶,讓該帳戶能部署內容至叢集:
kubectl create clusterrolebinding jenkins-deploy --clusterrole=cluster-admin --serviceaccount=default:cd-jenkins

輸出內容應如下所示:

clusterrolebinding.rbac.authorization.k8s.io/jenkins-deploy created
  1. 執行下列指令,從 Cloud Shell 設定通訊埠轉送功能,以便存取 Jenkins UI:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
  1. 檢查是否已正確建立 Jenkins Service。
kubectl get svc

輸出內容範例:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE cd-jenkins 10.35.249.67 8080/TCP 3h cd-jenkins-agent 10.35.248.1 50000/TCP 3h kubernetes 10.35.240.1 443/TCP 9h

您使用 Kubernetes 外掛程式,讓系統在 Jenkins 主要執行個體要求建構工具節點時,視需要自動啟動對應的節點。完成工作後,這些節點就會自動關閉,資源也會加回叢集的資源集區。

請注意,這項服務會對所有與選取條件相符的 Pod,公開通訊埠 808050000,也就是說,在 Kubernetes 叢集內公開 Jenkins 網頁 UI 和建構工具/代理程式註冊通訊埠。此外,jenkins-ui 服務會透過 ClusterIP 公開,不開放從叢集外部存取。

工作 5:連線到 Jenkins

擷取管理員密碼並登入 Jenkins 介面。

  1. Jenkins 資訊套件會自動為您建立管理員密碼。請執行下列指令,擷取該密碼:
printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  1. 在 Cloud Shell 動作列,依序點選「網頁預覽」圖示 和「透過以下通訊埠預覽:8080」,進入 Jenkins 使用者介面:

  2. 如果出現提示訊息,請透過 admin 這個使用者名稱和自動產生的密碼登入。

現在您已在 Kubernetes 叢集設定好 Jenkins!在接下來的幾個部分,Jenkins 將推動整個自動 CI/CD 管道的運作。

工作 6:瞭解應用程式

在這項工作中,您會在持續部署管道部署範例應用程式 gceme。這個應用程式是以 Go 語言編寫,位於存放區的 sample-app 目錄。您在 Compute Engine 執行個體上執行 gceme 二進位檔時,該應用程式會在資訊卡中顯示執行個體的中繼資料。

這個應用程式支援兩種作業模式,透過這種方式模擬微服務。

  • 後端模式下,gceme 會監聽通訊埠 8080,然後傳回 JSON 格式的 Compute Engine 執行個體中繼資料。
  • 前端模式下,gceme 會查詢後端 gceme 服務,然後將產生的 JSON 顯示在使用者介面上。

工作 7:部署應用程式

將應用程式部署至下列兩種不同的環境:

  • 正式環境:正式上線供使用者存取的網站。
  • 初期測試環境:容量較小的網站,只會接收部分使用者流量。您可以先在這個環境中,透過實際流量驗證軟體,確認沒有問題後,再向所有使用者發布。
  1. 在 Google Cloud Shell,前往範例應用程式目錄:
cd sample-app
  1. 建立 Kubernetes 命名空間,在邏輯層面上隔離這項部署:
kubectl create ns production
  1. 使用 kubectl apply 指令,建立正式環境和初期測試環境的部署項目及相關服務:
kubectl apply -f k8s/production -n production kubectl apply -f k8s/canary -n production kubectl apply -f k8s/services -n production

點選「Check my progress」,確認工作已完成。如果已成功建立部署項目,您就會看見評估分數。

建立正式環境和初期測試環境的部署項目

根據預設,系統只會部署一個前端副本。請使用 kubectl scale 指令,確保隨時都至少有 4 個副本正常運作。

  1. 執行下列指令,擴充正式環境前端:
kubectl scale deployment gceme-frontend-production -n production --replicas 4
  1. 確認前端有 5 個 Pod 正在運作,其中 4 個處理正式環境流量,1 個處理初期測試版 (初期測試版的變更只會影響五分之一 (20%) 的使用者):
kubectl get pods -n production -l app=gceme -l role=frontend
  1. 同時也確認後端有 2 個 Pod,1 個用於正式環境,另 1 個則用於初期測試環境。
kubectl get pods -n production -l app=gceme -l role=backend
  1. 擷取正式環境服務的外部 IP:
kubectl get service gceme-frontend -n production 注意:可能要過幾分鐘後,才會看到負載平衡器外部 IP 位址。

輸出內容範例:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gceme-frontend LoadBalancer 10.79.241.131 104.196.110.46 80/TCP 5h

外部 IP 貼至瀏覽器中,即可看到畫面上顯示資訊卡。您看到的頁面應與下圖類似:

  1. 將前端服務負載平衡器 IP 儲存至環境變數中,稍後會用到:
export FRONTEND_SERVICE_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend)
  1. 在瀏覽器中開啟前端外部 IP 位址,確認兩種服務都正常運作。

  2. 執行下列指令,檢查服務的版本輸出結果 (應顯示為「1.0.0」):

curl http://$FRONTEND_SERVICE_IP/version

您已成功部署範例應用程式!接下來要設定管道,以可靠的方式持續部署變更。

工作 8:建立 Jenkins 管道

在這項工作中,您將按照下列步驟建立 Jenkins 管道:

  • 建立存放區來託管原始碼
  • 新增憑證,讓 Jenkins 能存取程式碼存放區
  • 設定 Jenkins 的 Kubernetes 雲端環境
  • 完成 Jenkins 驗證,以便存取 GitHub 私人存放區
  • 建立 Jenkins 工作

建立存放區來託管範例應用程式原始碼

  1. 建立 gceme 範例應用程式的副本,並推送至 GitHub 存放區

在 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 輸出內容中。

gh repo create default --private

系統不會向您收取這個存放區的費用,因此可以忽略警告。

git init
  1. 將 sample-app 目錄初始化為獨立的 Git 存放區:
git config credential.helper gcloud.sh
  1. 執行下列指令:
git remote add origin https://github.com/${GITHUB_USERNAME}/default
  1. 新增、修訂及推送檔案:
git add . git commit -m "Initial commit" git push origin master

新增服務帳戶憑證

設定憑證來允許 Jenkins 存取程式碼存放區。Jenkins 會使用叢集的服務帳戶憑證,從 GitHub 存放區下載程式碼。

  1. 在 Jenkins 使用者介面,點選左側導覽區中的「Manage Jenkins」,然後依序按一下「Security」>「Credentials」

  2. 點選「System」

  1. 點選「Global credentials (unrestricted)」

  2. 點選右上角的「Add Credentials」

  3. 在「Kind」下拉式選單,選取「Google Service Account from metadata」

  4. 在「ID」欄位輸入專案 ID,然後點選「Create」

注意:「專案 ID」可在實驗室的「CONNECTION DETAILS」專區找到。

全域憑證已加入。

設定 Jenkins 的 Kubernetes 雲端環境

  1. 在 Jenkins 使用者介面,依序選取「Manage Jenkins」>「Nodes」
  2. 點選左側導覽窗格中的「Clouds」
  3. 點選「New cloud」
  4. 在「Cloud name」底下輸入名稱 (可自由命名),然後「Type」請選取「Kubernetes」
  5. 點選「Create」
  6. 在「Jenkins URL」欄位,輸入下列值:http://cd-jenkins:8080
  7. 在「Jenkins tunnel」欄位,輸入下列值:cd-jenkins-agent:50000
  8. 點選「Save」

使用安全殼層金鑰完成 Jenkins 驗證,以便存取 GitHub 私人存放區

按照下方步驟操作,使用安全殼層金鑰完成 Jenkins 驗證,以便存取 GitHub 私人存放區:

a. 產生安全殼層金鑰

  1. 建立新的 GitHub 安全殼層金鑰,其中 github-email 是您的 GitHub 電子郵件地址:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C [your-github-email]
  1. 在 Cloud Shell 動作列,點選「更多」圖示 ,然後選取「continuous-deployment-on-kubernetes/sample-app」資料夾,從本機電腦下載私密金鑰 (id_github) 和公開金鑰 (id_github.pub)。

b. 將公開金鑰新增至 GitHub

產生安全殼層金鑰後,必須將公開金鑰新增至 GitHub,Jenkins 才能存取存放區。

  1. 登入 GitHub 帳戶。點選 github 個人資料,然後前往「Settings」

  2. 選取側邊選單中的「SSH and GPG keys」

  3. 點選「New SSH key」

  4. 輸入「SSH_KEY_LAB」這個標題。

  5. 找到從 ~/continuous-deployment-on-kubernetes/sample-app/id_github.pub 這個路徑下載的公開金鑰 (id_github.pub),然後將金鑰內容貼至「Key」欄位。您也可以在「Title」欄位加入描述性名稱。

  6. 點選「Add SSH key」

c. 將 Jenkins 設為使用安全殼層金鑰

  1. 前往 Jenkins,然後選取資訊主頁中的「Manage Jenkins」

  2. 選取「Credentials」選項。

  3. 點選「Stores scoped to Jenkins」底下的「System」

  4. 點選「Global credentials (unrestricted)」

  5. 點選「Add Credentials」

  6. 在「Kind」下拉式選單,選取「SSH Username with private key」

  7. 「ID」請輸入 _ssh_key。

  8. 「Username」請輸入 [您的 GitHub 使用者名稱]

  9. 選擇「Enter directly」做為私密金鑰的提供方式,並點選「Add」,貼上 id_github 檔案 (從 ~/continuous-deployment-on-kubernetes/sample-app/id_github 下載) 的內容。

  10. 點選「Create」

d. 將公開安全殼層金鑰新增至已知主機

在 Cloud Shell 建立檔案並命名為 known_hosts.github,並將公開安全殼層金鑰加入這個檔案。

ssh-keyscan -t rsa github.com > known_hosts.github chmod +x known_hosts.github cat known_hosts.github 注意:如果在 Cloud Shell 看到錯誤,請按下 CTRL+C,然後執行上方的指令。

e. 設定已知的主機金鑰

  1. 在左側面板依序點選「Dashboard」>「Manage Jenkins」

  2. 在「Security」 底下,點選「Security」

  3. 在「Git Host Key Verification Configuration」底下,從「Host Key Verification Strategy」下拉式選單中選取「Manually provided keys」

  4. known hosts.github 檔案的內容貼到「Approved Host Keys」欄位。

  5. 點選「Save」

建立 Jenkins 工作

前往 Jenkins 使用者介面,按照下列步驟設定 Pipeline 工作。

  1. 在左側面板依序點選「Dashboard」>「New Item」

  2. 將專案命名為「sample-app」,選擇「Multibranch Pipeline」選項,再點選「OK」

  3. 在下一頁的「Branch Sources」專區,從「Add Source」下拉式選單中選取「Git」

  4. 在「Project Repository」欄位,貼上 sample-app 存放區的 HTTPS 複製網址。將 ${GITHUB_USERNAME} 改成您的 GitHub 使用者名稱

git@github.com:${GITHUB_USERNAME}/default.git
  1. 在「Credentials」選單的選項中,選取 GitHub 憑證名稱。

  2. 在「Scan Multibranch Pipeline Triggers」專區底下,勾選「Periodically if not otherwise run」方塊,然後將「Interval」的值設為「1 minute」

  3. 其餘選項的值都不更動,然後點選「Save」

完成上述步驟後,系統就會執行 Branch indexing 工作。這個中繼工作會找出存放區中的分支版本,並確保現有分支版本沒有任何變動。如果點選左上方的 sample-app,應該會看到 master 工作。

注意:第一次執行 master 工作時,可能會失敗,等到在下一步對程式碼做一些變更後,才會成功。

您已成功建立 Jenkins 管道!接下來要建立開發環境,以便進行持續整合。

工作 9:建立開發環境

開發分支版本是一組環境,開發人員會先在這裡測試程式碼變更,再提交出去,以便整合至正式網站。這些環境是應用程式的簡化版,但部署時仍須採用和實際工作環境一樣的機制。

建立開發分支版本

如要從功能分支版本建立開發環境,可將該分支版本推送至 Git 伺服器,讓 Jenkins 部署環境。

注意:如果在 Cloud Shell 看到錯誤,請按下 CTRL+C,然後執行下方的指令。
  • 建立開發分支版本,並推送至 Git 伺服器:
git checkout -b new-feature

修改管道定義

定義該管道的 Jenkinsfile 是使用 Jenkins Pipeline Groovy 語法編寫而成。如果使用 Jenkinsfile,就能將整個建構管道編寫到同一個檔案中,而且該檔案會和原始碼放在一起。管道支援某些強大的功能,例如平行處理及要求使用者手動核准。

為了讓管道正常運作,請修改 Jenkinsfile,設定專案 ID。

  1. 在終端機編輯器開啟 Jenkinsfile,例如 vi
vi Jenkinsfile
  1. 啟動編輯器:
i
  1. REPLACE_WITH_YOUR_PROJECT_ID 這個值改成您的 PROJECT_ID (PROJECT_ID 就是專案 ID,可在實驗室的 CONNECTION DETAILS 專區找到)。您也能執行 gcloud config get-value project 來查詢該 ID。

  2. CLUSTER_ZONE 的值變更為 。您可以執行 gcloud config get compute/zone 來查詢這個值。

PROJECT = "REPLACE_WITH_YOUR_PROJECT_ID" APP_NAME = "gceme" FE_SVC_NAME = "${APP_NAME}-frontend" CLUSTER = "jenkins-cd" CLUSTER_ZONE = "{{{project_0.default_zone}}}" IMAGE_TAG = "gcr.io/${PROJECT}/${APP_NAME}:${env.BRANCH_NAME}.${env.BUILD_NUMBER}" JENKINS_CRED = "${PROJECT}"
  1. 儲存 Jenkinsfile 檔案,按下 ESC 鍵,然後輸入下列內容 (適用於 vi 使用者):
:wq

修改網站

為了讓您體驗應用程式的變更流程,請將 gceme 資訊卡從藍色變更為橘色

  1. 開啟 html.go
vi html.go
  1. 啟動編輯器:
i
  1. 將檔案中的兩個 <div class="card blue"> 改成下列內容:
<div class="card orange">
  1. 儲存 html.go 檔案:按下 ESC 鍵,然後輸入下列內容:
:wq
  1. 開啟 main.go
vi main.go
  1. 啟動編輯器:
i
  1. 版本定義在這一行:
const version string = "1.0.0"

將該行更新為下列內容:

const version string = "2.0.0"
  1. 再儲存 main.go 檔案一次:按下 ESC 鍵,然後輸入下列內容:
:wq

工作 10:開始部署

在這項工作中,您將部署開發環境。

  1. 修訂並推送變更:
git add Jenkinsfile html.go main.go git commit -m "Version 2.0.0" git push origin new-feature

執行上述指令後,就會啟動開發環境的建構作業。

將變更推送至 Git 存放區之後,請前往 Jenkins 使用者介面,您會看到 new-feature 分支版本的建構作業已啟動。系統會在一分鐘內接收到變更。

  1. 開始建構後,請在左側導覽區點選該建構作業旁的向下箭頭,然後選取「Console output」

  1. 觀察建構作業的輸出內容幾分鐘,留意畫面上是否開始顯示 kubectl --namespace=new-feature apply... 訊息。該訊息出現時,就表示系統正在將 new-feature 分支版本部署至叢集。
注意:在開發階段,不會使用對外公開的負載平衡器。為提高應用程式的安全性,您可以使用 kubectl proxy。這個 Proxy 會向 Kubernetes API 驗證自己的身分,並將來自於本機電腦的要求透過 Proxy 傳送到叢集中的服務,但不會向網際網路公開服務。

如果建構執行工具中未顯示任何內容,別擔心。只要前往 Jenkins 首頁 >「sample app」,就能確認 new-feature 管道是否已建立。

  1. 全部都準備好之後,在背景啟動 Proxy:
kubectl proxy &
  1. 如果出現停滯不動的情況,請按下 CTRL+C 結束指令,然後傳送要求至 localhost,讓 kubectl Proxy 將要求轉送至服務,確認應用程式可正常存取:
curl \ http://localhost:8001/api/v1/namespaces/new-feature/services/gceme-frontend:80/proxy/version

回應內容應該會顯示 2.0.0,也就是正在執行的版本。

如果收到類似下列內容的錯誤訊息:

{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "no endpoints available for service \"gceme-frontend:80\"", "reason": "ServiceUnavailable", "code": 503
  1. 這表示前端端點尚未完成傳播,請稍候片刻,然後再試著執行 curl 指令。看到下列輸出內容時,即可繼續操作:
2.0.0

您已設定開發環境!接下來要延伸在先前單元學到的內容,部署初期測試版來測試新功能。

點選「Check my progress」,確認工作已完成。如果已成功啟動 new-feature 分支版本的建構作業,您就會看見評估分數。

建構 new-feature 分支版本

工作 11:部署初期測試版

您已確認應用程式在開發環境中執行的是最新程式嗎,接下來要將該程式碼部署至初期測試環境。

  1. 建立初期測試分支版本,並推送至 Git 伺服器:
git checkout -b canary git push origin canary
  1. 在 Jenkins 中,您應該會看到初期測試管道已啟動。待作業完成後,就能檢查服務網址,確認新版本已開始處理部分流量。大約每 5 個要求中,就會有 1 個 (沒有特定順序) 傳回版本 2.0.0
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. 如果持續看到 1.0.0,請重新執行上方的指令。確認上方流程正常運作後,請按下 CTRL+C 結束指令。

任務完成!您已部署初期測試版,接著要將新版本部署至正式環境。

點選「Check my progress」,確認工作已完成。如果已成功部署初期測試版,您就會看見評估分數。

部署初期測試版

工作 12:部署至正式環境

初期測試版已成功部署,而且未收到任何客訴,現在請將新版本部署至正式環境機群的其他部分。

  1. 建立初期測試分支版本,並推送至 Git 伺服器:
git checkout master git merge canary git push origin master

在 Jenkins 中,您應該會看到主要管道已啟動。

點選「Check my progress」,確認工作已完成。如果已成功啟動主要管道,您就會看見評估分數。

部署至正式環境
  1. 作業完成後 (可能需要幾分鐘的時間),可以檢查服務網址,確認新版本 2.0.0 已開始處理所有流量。
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. 再次提醒,如果傳回的版本仍是 1.0.0,請重新執行上方的指令。確認結果正常後,請按下 CTRL+C,停止執行這項指令。

輸出內容範例:

gcpstaging9854_student@qwiklabs-gcp-df93aba9e6ea114a:~/continuous-deployment-on-kubernetes/sample-app$ while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 ^C

您也能前往 gceme 應用程式顯示資訊卡的網站,應該可看到資訊卡已從藍色變成橘色。

  1. 再次執行下列指令,取得外部 IP 位址,然後將該外部 IP 貼至新分頁,查看顯示的資訊卡:
kubectl get service gceme-frontend -n production

輸出內容範例:

工作 13:隨堂測驗

完成下列選擇題能加深您的印象,更清楚本實驗室介紹的概念,盡力回答即可。

大功告成!

太棒了,您已成功將應用程式部署至正式環境。

恭喜!

本實作實驗室到此結束。您已順利在 Kubernetes Engine 部署並操作 Jenkins,建構能正常運作的持續推送軟體更新/持續部署管道。透過這次機會,您得以體驗如何在 Kubernetes Engine 部署重要的 DevOps 工具,並妥善設定,以便在正式環境中使用,過程中還實際運用 kubectl 指令列工具和 YAML 檔案中的部署設定。不僅如此,您也初步瞭解如何設定 Jenkins 管道,支援開發/部署程序。有了這次的實作經驗,您應該能放心在自己的 DevOps 環境中應用這些工具。

後續步驟/瞭解詳情

Google Cloud 教育訓練與認證

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

使用手冊上次更新日期:2025 年 6 月 10 日

實驗室上次測試日期:2025 年 6 月 10 日

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

上一步 下一步

准备工作

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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