在 Cloud Shell 適用的 Cloud Code 中加快開發速度

如要在 Cloud Shell 的 Cloud Code 中加快本機開發作業,請善用檔案同步和熱重載功能、儲存時自動部署功能,並使用 Skaffold 模組分別開發應用程式的各個部分。

啟用 Skaffold 檔案同步和熱重載功能

為提高本機開發工作流程的效率,並避免需要重建、重新部署及重新啟動 Pod,Skaffold 支援將變更的檔案複製至已部署的容器。也就是說,當您對靜態和原始碼檔案進行變更時,您可以看到變更在幾秒內生效,進而加快回饋循環。

對於靜態檔案 (例如 HTML 和 CSS 檔案),這種檔案複製行為稱為「檔案同步處理」

對於原始碼檔案,這項行為稱為「熱重載」,並支援下列檔案類型:

  • Go:*.go
  • Java:*.java、*.kt、*.scala、*.groovy、*.clj
  • NodeJS:*.js、*.mjs、*.coffee、*.litcoffee、*.json

設定熱重載後,Skaffold 會偵測支援檔案的變更,並將這些變更同步至叢集中執行中的容器。變更不支援熱重新載入的檔案類型,會觸發重新建構映像檔和 Pod 重新啟動。

當您使用 Buildpack 做為偏好的建構工具時,系統會預設啟用自動檔案同步和熱重新載入功能。對於 Docker 等其他建構工具,您可以在 skaffold.yaml 檔案中為要自訂的構件指定 sync 區段。

你的同步處理設定可以是下列其中一種 (依偏好順序排列):

  • auto:Skaffold 會自動設定同步處理作業。(僅適用於 Jib 和 Buildpacks 構件)。這是 Buildpack 的預設值。
  • infer:每個變更檔案的目的地會從建構工具推斷。
  • manual:您必須指定本機工作區中的檔案,以及執行中的容器中的目的地。

以下是 skaffold.yaml 檔案中 sync 部分的範例,其中指定了 manual 同步處理作業,將所有 /static-html HTML 檔案同步處理至容器中的 static 資料夾:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

如要進一步瞭解檔案同步處理和指定同步處理規則,請參閱 Skaffold 的檔案同步處理指南

在 Kubernetes 上開發時新增功能

設定檔案同步處理和熱重新載入功能後,請開始執行迭代週期,並在專案中新增更多功能。變更會直接部署至 Kubernetes 叢集,不必停止及移除部署項目,也不需要手動建構映像檔及加上標記,或是更新叢集。

標準的迭代週期如下所示:

  1. 在專案中進行變更。舉例來說,如果您使用 Cloud Code Java Guestbook 應用程式,請按照下列方式在 FrontendController 類別中新增端點:

    1. src/main/java/cloudcode/guestbook/frontend 開啟 FrontendController.java 檔案,然後新增下列內容:

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. 加入新註解 RequestMappingResponseBody 所需的匯入項目。

  2. 儲存變更 (Ctrl/Cmd+S) 或建構專案。

    您可以透過主控台視窗觀看進度和部署記錄。變更部署完成後,請確認更新。

  3. 如要結束持續開發工作階段,請按一下「停止」圖示。

    Cloud Code 會刪除用於開發工作階段的所有 Kubernetes 資源。

使用 Skaffold 設定開發微服務應用程式

開發微服務應用程式時,建議您獨立處理各個部分,以簡化偵錯和部署作業。

您可以將應用程式分割為 Skaffold 模組,進而獨立開發及偵錯應用程式的部分內容。舉例來說,Bank of Anthos 範例是包含十個微服務的應用程式。範例的 skaffold.yaml 檔案會將這些服務分組為五個 skaffold 模組,分別命名為 setupdbfrontendbackendloadgenerator

定義 Skaffold 模組和設定依附元件

如要定義 Skaffold 模組和設定依附元件,請按照下列步驟操作:

  1. 開啟要定義模組的專案。

  2. 開啟 skaffold.yaml 檔案。

  3. 如果 skaffold.yaml 檔案有多個設定,如要將設定設為 Skaffold 模組,請指定下列行:

    metadata:
      name: MODULE_NAME_1
    

    舉例來說,在 Bank of Anthos skaffold.yaml 中,db 模組會定義資料庫部署作業:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. 如果設定需要先部署其他設定,才能部署目前的設定,則必須將設定新增至依附元件。如要指定設定依附元件,請在 skaffold.yaml 檔案的 requires 區塊中新增 configs 清單。

    舉例來說,Bank of Anthos skaffold.yaml 檔案包含設定依附元件 setup

    如要定義依附元件,請在 skaffold.yaml 檔案中加入以下內容,其中 DEPENDENCY_NAME 是依附元件的名稱。

    requires:
        - configs: DEPENDENCY_NAME
    

    以這種方式列出的設定可參照在相同檔案或目前專案中其他 skaffold.yaml 檔案中定義的依附元件。

  5. 請按照「建構特定 Skaffold 模組及其依附元件」中的步驟,分別建構每個 Skaffold 模組,以便測試設定依附元件,確保這些模組會連同其依附元件部署。

建構特定 Skaffold 模組及其依附元件

定義模組及其依附元件後,您可以在 launch.json 檔案中指定要使用雲端程式碼執行的模組。

如果專案未定義 launch.json 檔案,當您執行 Cloud Code:在 Kubernetes 上執行Cloud Code:在 Kubernetes 上偵錯時,系統會提示您選取要建構的模組:

  1. 開啟指令面板 (Ctrl/Cmd+Shift+P),然後執行「Cloud Code: Run on Kubernetes」(Cloud Code:在 Kubernetes 上執行)
  2. 按一下「選取模組」
  3. 選擇要部署的模組,然後按一下「OK」。每個模組都會使用其依附元件進行建構。
  4. 系統提示時,請選擇圖像註冊資料庫,然後按下 Enter

如果專案有 launch.json,請按照下列步驟選擇要建構的 Skaffold 模組:

  1. 開啟專案的 launch.json 檔案。

  2. 編輯啟動設定,新增 skaffoldFlags 選項,並使用以半形逗號分隔的 modules 清單進行建構。如果省略 skaffoldFlags,則會建構所有模組。

      {
        "name": "Run on Kubernetes",
        "type": "cloudcode.kubernetes",
        "request": "launch",
        "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
        "skaffoldFlags": {
           "modules": ["MODULE_NAME_2,MODULE_NAME_2"],
        "watch": true,
        "cleanUp": true,
        }
      }
    
  3. 執行您編輯的啟動設定。

在 Kubernetes 上持續開發

設定好所需選項的執行目標後,您可以選擇定期執行應用程式,或在 IDE 上啟動開發疊代週期,將來源和依附元件的任何變更套用至運作中的應用程式。

「在 Kubernetes 上執行」執行目標會在 Kubernetes 叢集中啟動開發週期。開始開發週期後,Cloud Code 會使用 Skaffold 為專案建構映像檔,然後加上標記、推送至已設定的存放區,並使用 kubectl 部署專案的 Kubernetes 資訊清單。

  1. 使用可用的設定選項自訂部署作業。
  2. 如果應用程式已設定為使用 Skaffold 模組,您可以選取要建構或部署的特定模組
  3. 開啟指令面板 (按下 Ctrl/Cmd+Shift+P 鍵),然後執行「Cloud Code: Run on Kubernetes」指令。
  4. 確認是否要使用目前的 Kubernetes 結構定義來執行應用程式 (或切換至偏好的結構定義)。如要進一步瞭解如何設定 Kubernetes 情境,請參閱「設定設定」。
  5. 如果您選擇遠端叢集做為背景,請在系統提示時,選擇要推送圖片的映像註冊中心。如果專案已啟用 Artifact Registry API,且至少有一個 Artifact Registry 存放區,您可以瀏覽並選取現有的 Artifact Registry 存放區。

    Cloud Code 會建構容器、將容器推送至登錄,並將 Kubernetes 設定套用至叢集,然後等待部署。

後續步驟