db:migrate:multi-version-upgrade 作业
这个作业在合并请求流水线的测试阶段运行。它验证从最新的必需升级停止点到作者工作分支的多版本升级迁移是否通过。它通过运行 gitlab:db:configure 来实现,该命令针对使用测试数据从最新已知GitLab 版本停止点创建的 PostgreSQL 转储文件执行。
数据库转储文件由 PostgreSQL Dump Generator 生成和维护。为了用数据填充数据库,该工具使用 Data Seeder 和 bulk_data.rb 配置来填充所有工厂,并使用 db:seed_fu 来填充所有 db/fixtures。最新的转储文件会在必需停止点的最新补丁版本的预定流水线中自动生成。
故障排除
数据库重新配置失败
此故障通常是由于您的工作分支中存在实际的迁移错误导致的。要在本地重现此故障,请遵循 Migration upgrade testing 指南。该指南概述了如何在本地 GitLab Development Kit 或 GitLab Docker 实例中导入最新的 PostgreSQL 转储文件的步骤。
有关实际案例,请参阅 this failed job。
主分支损坏
当添加新的必需升级停止点时(每三或四个里程碑),它会触发构建新的 PostgreSQL 转储文件。在某些情况下,这可能会导致 db:migrate:multi-version-upgrade 作业在 master 流水线中失败。例如,如果新的附加表被填充,它有助于检测在未填充这些表的旧转储文件中可能被遗漏的迁移错误。
对于 broken master 情况的工作流程:
- 通过搜索导致错误的迁移来识别根本原因 MR。例如,failing job 中的
db/migrate/20240416123401_add_security_policy_management_project_id_to_security_policies.rb- 如 Database reconfigure failures 中所述,如果需要,在本地进行调试
- 联系引入迁移的相关团队,讨论是否应该回退该 MR 或是否将修复问题
- 如果团队不可用,请在
#databaseSlack 频道中发布相关信息
- 如果团队不可用,请在
- 在修复或回退工作进行时,可以通过在 CI/CD Settings page 中设置
DISABLE_DB_MULTI_VERSION_UPGRADE=true来临时禁用作业,从而解除对master流水线的阻塞- 禁用作业时,请在
#master-brokenSlack 频道中宣布
- 禁用作业时,请在
- 在 job stability tracking issue#458402 中添加注释
- 通过从 CI/CD 设置中移除
DISABLE_DB_MULTI_VERSION_UPGRADE来恢复作业
数据库导入失败
如果作业在 gitlab:db:configure 之前的设置阶段因外部依赖而失败,可以通过在 GitLab 项目 CI 变量中设置 DISABLE_DB_MULTI_VERSION_UPGRADE=true 来禁用该作业,以解除对 broken master 的阻塞。
联系 Self-Managed Platform team 以加快调试速度。