使用 Cloud Code for Cloud Shell 在本地开发 Cloud Run 服务

将服务部署到 Cloud Run 之前,您可以使用 Cloud Run 模拟器在本地开发该服务。

配置服务以进行开发

如果您未定义 .vscode/launch.json 文件,在 Cloud Run 模拟器上运行/调试 (Run/Debug on Cloud Run Emulator) 对话框可让您配置启动,然后将设置保存到 .vscode/launch.json。如果您配置了 .vscode/launch.json 文件,可以直接修改该文件。

如需在本地运行您的服务,请指定您的配置:

  1. 打开命令面板(按 Ctrl/Cmd+Shift+P 或点击 View > Command Palette),然后运行 Run on Cloud Run Emulator 命令。
  2. 在“Run/Debug on Cloud Run Emulator”对话框中,为您的配置设置规范:

    • 只有本地安装的构建工具可用于 Cloud Run Emulator
    • 选择 DockerBuildpack 作为构建器,然后指定源代码
    • (可选)如需指定要传递给正在运行的容器的任何环境变量,请展开 Advanced Build Settings,然后点击即可指定键值对。
      名称 说明 示例
      端口 要侦听的 HTTP 服务器的端口。 8080
      K_SERVICE 正在运行的 Cloud Run 服务的名称。 hello-world
      K_REVISION 正在运行的 Cloud Run 修订版本的名称。 hello-world.1
      K_CONFIGURATION 创建修订版本的 Cloud Run 配置的名称。 hello-world
    • (可选)要指定 Cloud SQL 连接,请展开高级服务设置,点击连接,然后每行指定一个 Cloud SQL 连接。
    • (可选)选中使本地网络中的其他设备可以访问该服务选项。
    • (可选)如果您只想手动重新构建并运行服务,而不是在进行更改时自动运行,请取消选中自动重新构建和更改时重新运行选项。

在本地运行服务

  1. 定义首选设置后,通过点击运行运行服务。
  2. 输出窗口中监控部署的状态。

    部署完成后,您可以通过打开输出窗口中显示的网址来查看正在运行的服务。

  3. 如需查看详细日志,请在输出窗口中切换到详细的 Cloud Run 视图。

    输出窗格,已从输出渠道下拉菜单中选择“hello-world-5 - Detailed”

  4. 会话完成后,右键点击即可使用以下命令:

    • 查看日志:使用 Cloud Code Logs Explorer 打开特定部署的应用日志
    • 打开网址:在网络浏览器中打开特定服务的应用服务网址
  5. 如果您在启动配置中关闭了监视模式,并且想要更改应用并重新构建和部署应用,请点击 Cloud Code 状态栏,然后点击开启监视模式

  6. 要停止部署,您可以在当前部署的操作栏中点击停止按钮。

    Cloud Run 部署的操作栏

存储密文

如果您的代码包含潜在的敏感数据(例如 API 密钥、密码和证书),则将它们存储为 Secret 有助于保护它们。借助 Cloud Code Secret Manager 集成,您可以安全地存储这些 Secret 并通过编程方式进行提取。如需详细了解如何使用 Cloud Code 创建和管理 Secret,请参阅 Secret Manager 指南

自定义现有 launch.json 配置

选择运行操作时,Cloud Code 插件会自动更新 launch.json 配置文件。如需进一步自定义服务的运行方式,您可以在 .vscode/launch.json 文件中指定以下字段:

  • watch:监控工作区中的更改并重新运行服务。默认情况下为 true。

    以下示例展示了设置为 true 的手表:

    "watch": true,
    
  • build:指定要在其中构建映像的构建器(Docker、jibMaven、jibGradle 或 buildpack)。

    以下示例展示了 Docker 构建器:

    "build": {
      "docker": {
        "path": "Dockerfile"
      }
    },
    

    以下示例展示了一个 Buildpack 构建器:

    "build": {
      "buildpacks": {
        "path": "src/requirements.txt",
        "builder": "gcr.io/buildpacks/builder:v1"
      }
    },
    
  • image:指定要使用的映像的名称。

    以下示例展示了如何指定映像名称:

      "image": "hello-world",
    
  • service:指定要使用的 Cloud Run 服务。

    以下示例展示了如何指定服务名称、端口和资源限制:

    "service": {
      "name": "hello-world",
      "containerPort": 8080,
      "resources": {
        "limits": {
          "memory": "256Mi"
        }
      }
    },
    
  • debug:指定调试设置(例如远程路径映射),以将本地路径映射到远程容器上的路径。

    以下示例展示了用于指示源文件位置的调试部分:

    "debug": {
      "sourceFileMap": {
        "${workspaceFolder}": "/app"
      }
    }
    

启用 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(仅适用于 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 指南