在Google Cloud Build期间在Google Cloud SQL上运行node.js数据库迁移

Fra*_*och 5 google-cloud-sql google-cloud-platform google-cloud-build

我想在Cloud Build过程中运行用node.js编写的数据库迁移。

当前,正在执行数据库迁移命令,但似乎Cloud Build进程无权通过具有用户名/密码的IP地址连接到Cloud SQL。

Kon*_*kus 20

对于Cloud SQLNode.js,它看起来像这样:

steps:
  # Install Node.js dependencies
  - id: yarn-install
    name: node:dubnium
    entrypoint: yarn
    waitFor: ['-']

  # Install CLoud SQL proxy
  - id: proxy-install
    name: alpine:3
    entrypoint: sh
    args:
      - '-c'
      - 'wget -O /workspace/cloud_sql_proxy https://storage.googleapis.com/cloudsql-proxy/v1.16/cloud_sql_proxy.linux.386 && chmod +x /workspace/cloud_sql_proxy'
    waitFor: ['-']

  # Migrate database schema to the latest version
  # https://knexjs.org/#Migrations-CLI
  - id: migrate
    name: node:dubnium
    entrypoint: sh
    args:
      - '-c'
      - '(/workspace/cloud_sql_proxy -dir=/workspace -instances=<CLOUD_SQL_CONNECTION> & sleep 2) && yarn run knex migrate:latest'
    timeout: '1200s'
    waitFor: ['yarn-install', 'proxy-install']

timeout: '1200s'
Run Code Online (Sandbox Code Playgroud)

您将并行启动yarn install和下载Cloud SQL代理。完成这两个步骤后,您将运行启动代理,等待2秒钟,最后运行yarn run knex migrate:latest

为此,您需要在GCP项目中启用Cloud SQL Admin API

<CLOUD_SQL_INSTANCE>您的Cloud SQL实例连接名称在哪里可以在此处找到。您的SQL连接设置中将使用相同的名称,例如host=/cloudsql/my-project/us-central1/db

另外,请确保在db实例所在的GCP项目中,Cloud Build服务帐户具有“ Cloud SQL Client”角色。

  • 您是否遇到了无法连接到本地主机的问题?我遇到一个问题,好像云sql代理成功连接,它甚至说“正在接受127.0.0.1:5432的连接”,但是当我尝试连接时,它说的是“ ECONNREFUSED 127.0.0.1:5432”。这在我的本地计算机上完美运行。它们都是同一卷的一部分。 (2认同)

kur*_*svg 9

从 标记1.16gcr.io/cloudsql-docker/gce-proxy,当前接受的答案不再有效。这是一种不同的方法,它使代理与需要它的命令保持在同一步骤:

  - id: cmd-with-proxy
    name: [YOUR-CONTAINER-HERE]
    timeout: 100s
    entrypoint: sh
    args:
      - -c
      - '(/workspace/cloud_sql_proxy -dir=/workspace -instances=[INSTANCE_CONNECTION_NAME] & sleep 2) && [YOUR-COMMAND-HERE]'
Run Code Online (Sandbox Code Playgroud)

一旦主进程退出,代理将自动退出。此外,如果代理或给定的命令失败,它会将步骤标记为“错误”。

这确实需要二进制文件在/workspace卷中,但这可以手动或通过这样的 prereq 步骤提供:

  - id: proxy-install
    name: alpine:3.10
    entrypoint: sh
    args:
      - -c
      - 'wget -O /workspace/cloud_sql_proxy https://storage.googleapis.com/cloudsql-proxy/v1.16/cloud_sql_proxy.linux.386 &&  chmod +x /workspace/cloud_sql_proxy'
Run Code Online (Sandbox Code Playgroud)

此外,这应该与 TCP 一起使用,因为代理将与命令位于同一容器中。