构建服务器通常与运行实例的 VPC 分离。无论是 GCP 上的 Cloud Build,还是利用众多 CI 工具之一(CircleCI、Codeship 等),因此运行数据库模式更新特别具有挑战性。
所以,这让我想知道......什么时候运行数据库模式迁移的最佳位置?
从我的角度来看,有四种机会可以在 CD 管道中自动运行模式迁移或种子:
- 在构建阶段
- 在实例启动时
- 通过预热脚本(同步或异步)
- 通过端点,自动或手动调用部署后
选项 1 的主要问题是安全性。使用 Google Cloud Sql/Google Cloud Build,我可以通过构建步骤和 SQL 代理运行(非常困难)、模式迁移/种子。老实说,设置起来真是让人头疼……但它确实有效。
我的最新项目是使用 MongoDb,如果我需要移动一些数据/播种一些数据,我已经在 migrate-mongo 中连接了它。不幸的是,没有这样的 SQL 代理可以安全地将 MongoDb(atlas)连接到 Cloud Build(或任何其他 CI 工具),因为它不在实例的 VPC 中运行。因此,在我看来,这是一条死胡同。
因此,我对热身脚本概念进行了加热(不是双关语)。
使用 App Engine,在提供流量之前调用预热脚本,并在已经通过 VPC 访问的主机上调用。预热脚本旨在用于打开数据库连接以加快连接速度,但假设没有未完成的迁移,它会这样做 - 一个非常轻量级的 select 语句。
谁能想到这种方法有什么问题?
选项 4 也很合适(本质上是一样的)。不过,这些端点可能需要更多保护 - 特别是如果存在“向下”迁移脚本(!)