You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cloud Build中连接Cloud SQL执行knex数据库迁移?

问题根因
  • 代理路径拼写错误:proxy-install步骤将Cloud SQL代理二进制文件下载到/workspace/cloud_sql_proxy,Cloud Build所有步骤默认工作目录为/workspace,migrate步骤中错误写为./workspace/cloud_sql_proxy,实际解析为/workspace/workspace/cloud_sql_proxy,对应文件不存在,直接触发not found报错。
  • 套接字路径不匹配:启动代理时指定socket存放目录为/workspace,但knex默认读取Cloud SQL socket的路径为/cloudsql/<实例连接名>,路径不一致导致knex无法找到数据库连接套接字,抛出ENOENT连接错误。
  • 环境镜像不统一:依赖安装使用node:14.16.0镜像,后续步骤使用Cloud Build自带的yarn镜像,两个镜像的运行环境存在差异,也可能引发未知的运行异常。
修复方案

方案一(推荐,无需修改knex配置)

直接调整cloudbuild.yaml配置,统一运行环境、修正路径错误、匹配套接字目录:

steps:
  - name: 'node:14.16.0'
    entrypoint: 'yarn'
    id: yarn-install
    args: ['install']
    waitFor: ["-"]

  - name: 'node:14.16.0'
    id: proxy-install
    entrypoint: sh
    args:
      - "-c"
      - "apt update && apt install -y wget && wget https://storage.googleapis.com/cloudsql-proxy/v1.23.0/cloud_sql_proxy.linux.amd64 -O /workspace/cloud_sql_proxy && chmod +x /workspace/cloud_sql_proxy"
    waitFor: ["-"]

  - id: migrate
    name: 'node:14.16.0'
    env:
      - NODE_ENV=$_NODE_ENV
      - DB_NAME=$_DB_NAME
      - DB_USER=$_DB_USER
      - DB_PASSWORD=MY_FAKE_PASSWORD
      - CLOUD_SQL_CONNECTION_NAME=$_CLOUD_SQL_CONNECTION_NAME
    entrypoint: sh
    args:
      - "-c"
      - "(mkdir -p /cloudsql && /workspace/cloud_sql_proxy -dir=/cloudsql -instances=$_CLOUD_SQL_CONNECTION_NAME & sleep 5) && yarn run knex migrate:latest"
    timeout: "1200s"
    waitFor: ["yarn-install", "proxy-install"]

说明:该方案将代理套接字存放目录改为knex默认读取的/cloudsql,提前创建对应目录即可,无需修改业务代码。

方案二(需同步修改knex配置)

如果不想调整代理的套接字目录,可同步修正两处配置:

  1. 修改migrate步骤的代理启动路径,将./workspace/cloud_sql_proxy改为/workspace/cloud_sql_proxy
  2. 调整knex配置文件中的数据库连接host,改为:
host: `/workspace/${process.env.CLOUD_SQL_CONNECTION_NAME}`

内容的提问来源于stack exchange,提问作者Roman Mahotskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 16:06:04