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

如何使用GitHub代码对Cloud SQL私有实例执行Django migrations

私有Cloud SQL环境下通过GitHub触发Django migrations解决方案

核心实现逻辑

Cloud Build默认公共池无法访问VPC内资源,我们通过Cloud Build私有工作池 + Cloud SQL Auth Proxy的组合,让构建流程接入你的生产VPC,实现私有Cloud SQL实例的访问,整个触发逻辑和执行配置全部托管在GitHub代码库中。

前置配置

  • 提前在生产VPC中创建Cloud Build私有工作池,配置和私有Cloud SQL实例同区域,确保VPC防火墙放行私有工作池网段到Cloud SQL私有IP的数据库端口访问
  • 为Cloud Build服务账号授予以下权限:Cloud SQL 客户端、Secret Manager 秘密读取者、私有工作池使用者、Cloud Storage 对象管理员(用于存储构建日志)

GitHub代码库配置

1. 新增构建配置文件

在仓库根目录新增cloudbuild.yaml文件,提交到GitHub,示例配置如下:

steps:
  # 步骤1:安装Python依赖
  - name: python:3.11-slim
    entrypoint: pip
    args: ["install", "-r", "requirements.txt", "--user"]

  # 步骤2:拉取并启动Cloud SQL Auth Proxy
  - name: gcr.io/cloud-builders/gcloud
    entrypoint: bash
    args:
      - "-c"
      - |
        wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
        chmod +x cloud_sql_proxy
        ./cloud_sql_proxy -instances=${_PROJECT_ID}:${_REGION}:${_SQL_INSTANCE_NAME}=tcp:5432 &
        sleep 5 # 等待代理启动完成

  # 步骤3:执行Django migrations
  - name: python:3.11-slim
    entrypoint: python
    args: ["manage.py", "migrate"]
    env:
      - "DATABASE_PASSWORD=$$DB_PASSWORD"
      - "DATABASE_USER=$$DB_USER"
      - "DATABASE_HOST=127.0.0.1"
      - "DATABASE_PORT=5432"
    secretEnv: ["DB_PASSWORD", "DB_USER"]

# 指定使用私有工作池接入VPC
options:
  pool:
    name: "projects/${_PROJECT_ID}/locations/${_REGION}/workerPools/${_PRIVATE_POOL_NAME}"

# 引用Secret Manager中存储的敏感配置,避免硬编码
availableSecrets:
  secretManager:
    - versionName: projects/${_PROJECT_ID}/secrets/db_user/versions/latest
      env: "DB_USER"
    - versionName: projects/${_PROJECT_ID}/secrets/db_password/versions/latest
      env: "DB_PASSWORD"

# 自定义变量,可在触发器配置中按需替换值
substitutions:
  _PROJECT_ID: "你的GCP项目ID"
  _REGION: "Cloud SQL实例所在区域"
  _SQL_INSTANCE_NAME: "Cloud SQL实例名称"
  _PRIVATE_POOL_NAME: "Cloud Build私有工作池名称"

2. 配置Cloud Build触发器

在Google Cloud控制台中创建Cloud Build触发器,绑定你的GitHub仓库,触发规则可配置为:

  • 触发分支:main(或你指定的生产分支)
  • 触发事件:推送代码时触发,可额外配置仅当*/migrations/*目录下文件变更时触发,减少不必要的构建执行
  • 构建配置选择仓库中的cloudbuild.yaml文件

执行流程

  1. 本地开发完成Django模型变更后,执行python manage.py makemigrations生成迁移文件
  2. 将迁移文件和代码提交到GitHub对应分支,自动触发Cloud Build执行
  3. 可在Cloud Build控制台查看构建日志,确认migrations执行结果

注意事项

  • 所有敏感配置全部存储在GCP Secret Manager中,禁止硬编码到代码库
  • 生产环境可在执行migrations前新增Cloud SQL备份步骤,避免迁移异常导致数据损坏
  • 若不需要自动执行,也可配置触发器为手动触发,确认迁移文件无误后手动启动构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:00:05