如需加快在 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 工件。)这是 Buildpacks 的默认值。infer:系统会根据构建器推断每个更改文件的目标位置。manual:您必须在本地工作区中指定文件及其在 运行中的容器中的目标位置。
以下示例 sync 部分在 skaffold.yaml 文件中指定了
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示例
是一个包含 10 个微服务的应用。该示例的
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 模块来测试您的配置依赖项,以确保按照 构建特定 Skaffold 模块及其依赖项中的步骤部署它们及其 依赖项。
构建特定 Skaffold 模块及其依赖项
定义模块及其依赖项后,您可以在选择运行 > 修改配置 时,在构建 / 部署 标签页中指定要运行的模块。安装最新的内部人员版本。
转到运行 > 修改配置 并打开构建 / 部署 标签页。
对于 Skaffold 配置 ,选择 skaffold.yaml。
请按以下方式之一操作:
- 使用所有模块和依赖项构建和部署
- 构建和部署方式 (如果模块可用)并选择要构建和部署的模块。
您的选择会持续用于后续部署。如果您选择模块的子集,Cloud Code 会显示一条关于部署模块子集而不是整个系统的警告。
在 Kubernetes 上进行持续开发
使用所需的选项配置运行目标后,您可以选择以常规方式运行应用,或在 IDE 中启动开发迭代周期,以将对源和依赖项所做的任何更改传播到运行中的应用。
Develop on Kubernetes 运行目标会在 Kubernetes 集群上启动开发周期。 启动开发周期后, Cloud Code 会使用 Skaffold 为 项目构建一个映像,然后对其进行标记,将其推送到所配置的存储区,并使用 kubectl 部署项目 Kubernetes 清单。
- 点击 Develop on Kubernetes 图标,然后点击修改配置 以打开运行/调试配置 对话框。
- 使用 可用的配置选项自定义部署。
- 如果您希望 Cloud Code 在保存更改后自动重新部署应用 ,请在 Watch mode - rebuild and redeploy 下选择 On file save 。默认情况下,新 Kubernetes 应用会选择按需 。如需详细了解观察模式, 请参阅观察模式。
- 如果您的应用配置为使用 Skaffold 模块,您可以 选择仅构建或部署特定模块。
- 对配置感到满意后,点击确定 ,然后点击运行 图标。
后续步骤
- 使用 Cloud Code 的内置 minikube 集群 进行本地开发。
- 在 Cloud Code 中调试应用
- 详细了解 Skaffold 的文件同步功能