如何使用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文件
执行流程
- 本地开发完成Django模型变更后,执行
python manage.py makemigrations生成迁移文件 - 将迁移文件和代码提交到GitHub对应分支,自动触发Cloud Build执行
- 可在Cloud Build控制台查看构建日志,确认migrations执行结果
注意事项
- 所有敏感配置全部存储在GCP Secret Manager中,禁止硬编码到代码库
- 生产环境可在执行migrations前新增Cloud SQL备份步骤,避免迁移异常导致数据损坏
- 若不需要自动执行,也可配置触发器为手动触发,确认迁移文件无误后手动启动构建
内容的提问来源于stack exchange,提问作者Aseem
相关产品推荐
相关产品推荐

