要在 Cloud Code for Cloud Shell 中加快您的本地开发,请使用 同步和热重载、保存时自动部署,以及使用 Skaffold 模块 来单独开发应用的各个部分。
启用 Skaffold 文件同步和热重载
为了提高本地开发工作流的效率,并避免 重新构建、重新部署和重启 Pod,Skaffold 支持 将更改的文件复制到已部署的容器。也就是说,在对静态文件进行更改时 和源代码文件,您可以看到您的更改在几秒钟内生效,因此可以加速 反馈环。
对于静态文件(例如 HTML 和 CSS 文件),这种文件复制行为称为 文件同步。
对于源代码文件,此行为称为热重载,并且支持 以下文件类型:
- Go: *.go
- Java: *.java,、*.kt、*.scala、*.groovy、*.clj
- NodeJS: *.js、*.mjs、*.coffee、*.litcoffee、*.json
配置热重载后,Skaffold 会检测受支持文件的更改,并同步这些文件 集群上正在运行的容器的更改对不支持热源的文件类型的更改 重新加载会触发映像重新构建和 Pod 重启。
当您将 Buildpacks 作为首选构建器使用时,系统会默认启用自动文件同步和热重载。对于其他构建器,例如
对于 Docker,您可以在 skaffold.yaml
文件中为sync
自定义工件
您的同步设置可以是以下其中一项(按优先顺序排列):
auto
:Skaffold 会自动配置同步。(仅适用于 Jib 和 Buildpack artifacts.)这是 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 留言板应用,请将新端点添加到
FrontendController
类,如下所示:从以下位置打开
FrontendController.java
文件:src/main/java/cloudcode/guestbook/frontend
并添加以下代码:@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
模块定义 数据库部署:对于依赖于 可以部署当前配置,因此您必须将配置添加到 依赖项如需指定配置依赖项,请将
configs
列表添加到skaffold.yaml
文件的requires
部分。例如,Bank of Anthos
skaffold.yaml
文件包含 配置依赖项setup
。如需定义依赖项,请将以下代码添加到
skaffold.yaml
文件中,其中 DEPENDENCY_NAME 是依赖项的名称。requires: - configs: DEPENDENCY_NAME
以这种方式列出的配置可以引用 当前项目中的相同文件或其他
skaffold.yaml
文件。通过构建每个 Skaffold 文件来测试您的配置依赖项 以便确保它们能与各自的 API 一起部署, 安装依赖项 构建特定的 Skaffold 模块及其依赖项。
构建特定的 Skaffold 模块及其依赖项
定义模块及其依赖项后,您可以指定
launch.json
文件中使用 Cloud 代码运行的模块。
如果您的项目未定义 launch.json
文件,则当您运行 Cloud
代码:Run on Kubernetes 或 Cloud Code: Debug on Kubernetes,
提示您选择要构建的模块:
- 打开 Command Palette (
Ctrl
/Cmd
+Shift
+P
),然后运行 Cloud 代码:在 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 上进行持续开发
使用所需的选项配置运行目标后,您可以 选择定期运行您的应用,或开始开发 迭代周期,以便将对源代码和 添加到运行中的应用
Run on Kubernetes 运行目标会在您的 Kubernetes 集群启动开发周期后, Cloud Code 使用 Skaffold 为 然后对其进行标记,将其推送到已配置的代码库,并使用 kubectl 部署项目的 Kubernetes 清单。
- 使用可用的配置选项自定义部署。
- 如果您的应用配置为使用 Skaffold 模块,您可以 选择要构建或部署的特定模块。
- 打开 Command Palette(按
Ctrl
/Cmd
+Shift
+P
),然后运行 Cloud Code: Run on Kubernetes 命令。 - 确认要使用当前的 Kubernetes 上下文来运行应用(还是切换到首选 Kubernetes 上下文)。如需详细了解如何设置 Kubernetes 上下文,请参阅设置配置。
如果您选择了远程集群作为上下文,请在出现提示时选择将映像推送到其中的映像注册数据库。如果您使用的是 Container Registry,则可以浏览至现有注册数据库,或指定要创建的注册数据库的名称。如果您的项目已启用 Artifact Registry API 并且至少有一个 Artifact Registry 代码库,则可以浏览并选择现有的 Artifact Registry 代码库。
Cloud Code 会构建您的容器,将其推送到注册表,将 Kubernetes 配置应用到集群,并等待发布。
后续步骤
- 使用 Cloud Code 的内置功能 minikube 集群 进行本地开发
- 在 Cloud Code 中调试应用
- 如需了解详情,请访问 Skaffold 的文件同步功能