在 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: Run on Kubernetes」或「Cloud Code: Debug on Kubernetes」時,系統會提示您選取要建構的模組:

  1. 開啟「Command Palette」(指令面板) (Ctrl/Cmd+Shift+P),然後執行「Cloud Code: Run on Kubernetes」(Cloud Code:在 Kubernetes 上執行)
  2. 按一下「選取模組」
  3. 選擇要部署的模組,然後按一下「確定」。每個模組都會連同依附元件一併建構。
  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 上啟動開發疊代週期,將來源和依附元件的任何變更套用至運作中的應用程式。

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

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

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

後續步驟