如需在 Cloud Code for IntelliJ 中加快本地开发速度,请利用文件同步和热重载、保存时自动部署,并使用 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 和 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 留言板应用,请按如下所示向
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 示例是一个包含 10 个微服务的应用。示例的 skaffold.yaml
文件会将这些服务分组为五个名为 setup
、db
、frontend
、backend
和 loadgenerator
的 skaffold 模块。
定义 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 模块来测试您的配置依赖项,以确保按照构建特定 Skaffold 模块及其依赖项中的步骤部署它们及其依赖项。
构建特定的 Skaffold 模块及其依赖项
定义模块及其依赖项后,您可以在 Build / Deploy 标签页中依次选择 Run > Edit configurations,指定要运行的模块。安装最新的内部人员版本。
依次选择 Run > Edit Configurations,然后打开 Build / Deploy 标签页。
对于 Skaffold 配置,请选择 skaffold.yaml。
请按以下方式之一操作:
- 使用所有模块和依赖项构建和部署
- 构建和部署方式(如果模块可用),然后选择要构建和部署的模块。
您的选择会持续用于后续部署。如果您选择模块的子集,Cloud Code 会显示一条关于部署模块子集而不是整个系统的警告。
在 Kubernetes 上进行持续开发
使用所需选项配置运行目标后,您可以选择以常规方式运行应用,也可以在 IDE 中启动开发迭代周期,以将对源代码和依赖项所做的任何更改传播到运行中的应用。
在 Kubernetes 上开发运行目标会在 Kubernetes 集群上启动开发周期。启动开发周期后,Cloud Code 会使用 Skaffold 为项目构建一个映像,然后对其进行标记,将其推送到所配置的存储区,并使用 kubectl 部署项目 Kubernetes 清单。
- 点击 Develop on Kubernetes 图标,然后点击 Edit Configurations 以打开 Run/Debug Configurations 对话框。
- 使用可用的配置选项自定义部署。
- 如果您希望 Cloud Code 在保存更改后自动重新部署应用,请在 Watch mode - rebuild and Redeploy 下选择 On filesave。默认情况下,新 Kubernetes 应用会选择按需。如需详细了解观察模式,请参阅观察模式。
- 如果您的应用配置为使用 Skaffold 模块,您可以选择仅构建或部署特定模块。
- 对配置感到满意后,点击确定,然后点击运行图标。
后续步骤
- 使用 Cloud Code 的内置 minikube 集群进行本地开发。
- 在 Cloud Code 中调试应用
- 详细了解 Skaffold 的文件同步功能