如要在 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 叢集,不必停止及移除部署項目,也不需要手動建構映像檔及加上標記,或是更新叢集。
標準的疊代週期如下所示:
在專案中進行變更。舉例來說,如果您使用 Cloud Code Java Guestbook 應用程式,請按照下列步驟,將新端點新增至
FrontendController
類別:從
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); }
加入新註解
RequestMapping
和ResponseBody
所需的匯入項目。
儲存變更 (
Ctrl
/Cmd+S
) 或建構專案。您可以在主控台視窗觀看進度和部署記錄。部署變更後,請確認更新。
如要結束持續開發工作階段,請按一下「停止」圖示。
Cloud Code 會刪除所有用於開發工作階段的 Kubernetes 資源。
使用 Skaffold 設定開發微服務應用程式
開發微服務應用程式時,獨立處理各個部分有助於簡化偵錯和部署作業。
您可以將應用程式分割成 Skaffold 模組,獨立開發及偵錯應用程式的各個部分。舉例來說,Bank of Anthos 範例是包含十個微服務的應用程式。範例的 skaffold.yaml
檔案會將這些服務分組為五個 Skaffold 模組,分別命名為 setup
、db
、frontend
、backend
和 loadgenerator
。
定義 Skaffold 模組和設定依附元件
如要定義 Skaffold 模組和設定依附元件,請按照下列步驟操作:
開啟要定義模組的專案。
開啟
skaffold.yaml
檔案。如果
skaffold.yaml
檔案有多個設定,如要將設定設為 Skaffold 模組,請指定下列程式碼:metadata: name: MODULE_NAME_1
舉例來說,在 Bank of Anthos
skaffold.yaml
中,db
模組會定義資料庫部署作業:如果某項設定必須先部署其他設定,才能部署目前設定,您必須將該設定加入依附元件。如要指定設定依附元件,請在
skaffold.yaml
檔案的requires
區段中新增configs
清單。舉例來說,Bank of Anthos
skaffold.yaml
檔案包含設定依附元件setup
。如要定義依附元件,請在
skaffold.yaml
檔案中新增下列內容,其中 DEPENDENCY_NAME 是依附元件的名稱。requires: - configs: DEPENDENCY_NAME
以這種方式列出的設定可以參照目前專案中相同檔案或其他
skaffold.yaml
檔案中定義的依附元件。請分別建構每個 Skaffold 模組,測試設定依附元件,確保這些模組會連同依附元件一併部署,操作步驟請參閱「建構特定 Skaffold 模組及其依附元件」。
建構特定 Skaffold 模組及其依附元件
定義模組及其依附元件後,您可以在 launch.json
檔案中指定要透過雲端程式碼執行的模組。
如果專案未定義 launch.json
檔案,當您執行「Cloud Code: Run on Kubernetes」或「Cloud Code: Debug on Kubernetes」時,系統會提示您選取要建構的模組:
- 開啟「Command Palette」(指令面板) (
Ctrl
/Cmd
+Shift
+P
),然後執行「Cloud Code: Run on Kubernetes」(Cloud Code:在 Kubernetes 上執行)。 - 按一下「選取模組」。
- 選擇要部署的模組,然後按一下「確定」。每個模組都會連同依附元件一併建構。
- 系統提示時,請選擇映像檔登錄檔,然後按下
Enter
。
如果專案有 launch.json
,請按照下列步驟選擇要建構的 Skaffold 模組:
開啟專案的
launch.json
檔案。編輯啟動設定,新增
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, } }
執行您編輯的啟動設定。
在 Kubernetes 上持續開發
使用所需選項設定執行目標後,您可以選擇定期執行應用程式,或在 IDE 上啟動開發疊代週期,將來源和依附元件的任何變更套用至運作中的應用程式。
「Run on Kubernetes」(在 Kubernetes 上執行) 執行目標會啟動 Kubernetes 叢集的開發週期。開始開發週期後,Cloud Code 會使用 Skaffold 為專案建構映像檔,然後加上標記、推送至已設定的存放區,並使用 kubectl 部署專案的 Kubernetes 資訊清單。
- 使用可用設定選項自訂部署作業。
- 如果應用程式已設定為使用 Skaffold 模組,您可以選取要建構或部署的特定模組。
- 開啟「Command Palette」(按下
Ctrl
/Cmd
+Shift
+P
鍵),然後執行「Cloud Code: Run on Kubernetes」指令。 - 確認是否要使用目前的 Kubernetes 內容執行應用程式 (或切換至偏好的內容)。如要進一步瞭解如何設定 Kubernetes 環境,請參閱「設定設定」。
如果您選擇遠端叢集做為環境,系統會提示您選擇要將映像檔推送至哪個映像檔登錄檔。如果專案已啟用 Artifact Registry API,且至少有一個 Artifact Registry 存放區,即可瀏覽並選取現有的 Artifact Registry 存放區。
Cloud Code 會建構容器、將容器推送至登錄檔、將 Kubernetes 設定套用至叢集,並等待推出。
後續步驟
- 使用 Cloud Code 內建的 minikube 叢集進行本機開發。
- 在 Cloud Code 中偵錯應用程式
- 詳情請參閱 Skaffold 的檔案同步功能