加快 Cloud Code for IntelliJ 中的开发速度

如需加快在 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 集群,而无需停止和移除部署、手动构建和标记映像或更新集群。

标准迭代周期类似于以下内容:

  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示例 是一个包含 10 个微服务的应用。该示例的 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. 对于依赖于要部署另一个配置才能部署当前配置的配置,您必须将该配置添加到依赖项中。如需指定配置依赖项,请将 configs 列表添加到 skaffold.yaml 文件的 requires 部分。

    例如,Bank of Anthos skaffold.yaml 文件包含配置依赖项 setup

    如需定义依赖项,请将以下内容添加到 skaffold.yaml 文件中,其中 DEPENDENCY_NAME 是依赖项的名称。

    requires:
        - configs: DEPENDENCY_NAME
    

    以这种方式列出的配置可以引用在同一文件或当前项目中的其他 skaffold.yaml 文件中定义的依赖项。

  5. 通过单独构建每个 Skaffold 模块来测试您的配置依赖项,以确保按照 构建特定 Skaffold 模块及其依赖项中的步骤部署它们及其 依赖项。

构建特定 Skaffold 模块及其依赖项

定义模块及其依赖项后,您可以在选择运行 > 修改配置 时,在构建 / 部署 标签页中指定要运行的模块。

  1. 安装最新的内部人员版本

  2. 转到运行 > 修改配置 并打开构建 / 部署 标签页。

  3. 对于 Skaffold 配置 ,选择 skaffold.yaml。

    请按以下方式之一操作:

    • 使用所有模块和依赖项构建和部署
    • 构建和部署方式 (如果模块可用)并选择要构建和部署的模块。

您的选择会持续用于后续部署。如果您选择模块的子集,Cloud Code 会显示一条关于部署模块子集而不是整个系统的警告。

在 Kubernetes 上进行持续开发

使用所需的选项配置运行目标后,您可以选择以常规方式运行应用,或在 IDE 中启动开发迭代周期,以将对源和依赖项所做的任何更改传播到运行中的应用。

Develop on Kubernetes 运行目标会在 Kubernetes 集群上启动开发周期。 启动开发周期后, Cloud Code 会使用 Skaffold 为 项目构建一个映像,然后对其进行标记,将其推送到所配置的存储区,并使用 kubectl 部署项目 Kubernetes 清单。

  1. 点击 Develop on Kubernetes 图标,然后点击修改配置 以打开运行/调试配置 对话框。
  2. 使用 可用的配置选项自定义部署。
  3. 如果您希望 Cloud Code 在保存更改后自动重新部署应用 ,请在 Watch mode - rebuild and redeploy 下选择 On file save 。默认情况下,新 Kubernetes 应用会选择按需 。如需详细了解观察模式, 请参阅观察模式
  4. 如果您的应用配置为使用 Skaffold 模块,您可以 选择仅构建或部署特定模块
  5. 对配置感到满意后,点击确定 ,然后点击运行 图标。

后续步骤

获取支持

如需在 IntelliJ IDE 中提交反馈或报告问题,请依次前往 工具 > Cloud Code > 帮助 / 简介 > 提交 反馈或报告问题,以在 GitHub 上报告问题。