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 SQL和Node.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”角色。
从 标记1.16起gcr.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 一起使用,因为代理将与命令位于同一容器中。
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |