← ClaudeAtlas

database-migration-cdlisted

当用户要求"数据库迁移 CD/Flyway 部署/数据库变更/数据库持续部署"时触发。 在 CI/CD 流水线中安全执行数据库迁移(Flyway),含回滚策略。
structure-projects/structure-agent-rules · ★ 1 · API & Backend · score 66
Install: claude install-skill structure-projects/structure-agent-rules
# 数据库迁移 CD > 在 CI/CD 流水线中安全执行数据库迁移。**生产迁移 MUST 用户确认 + 备份**。 ## 核心原则 - ✅ **MUST** 迁移脚本与应用代码同 PR 提交(保持版本一致) - ✅ **MUST** 迁移在应用部署**之前**执行(先 DB 后 App) - ✅ **MUST** 迁移前备份生产数据库 - ✅ **MUST** 迁移失败时应用部署中止 - ❌ **MUST NOT** 在生产环境跳过备份直接迁移 ## Flyway 迁移工作流 ### 在 CI 流水线中的位置 ``` 代码提交 → 单测 → 打包 → 镜像构建 ↓ DB 迁移(测试)→ 应用部署(测试) ↓ 测试验证 ↓ 生产审批(人工) ↓ DB 备份(生产) ↓ DB 迁移(生产) ↓ 应用部署(生产) ↓ 健康检查 ``` ### GitHub Actions 集成 ```yaml # .github/workflows/deploy.yml jobs: migrate-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Flyway migrate (test) run: | mvn flyway:migrate \ -Dflyway.url=jdbc:mysql://test-mysql:3306/mydb \ -Dflyway.user=${{ secrets.DB_USER }} \ -Dflyway.password=${{ secrets.DB_PASSWORD }} deploy-test: needs: migrate-test # 迁移成功后才部署 # ... migrate-prod: needs: approval # 人工审批后 runs-on: ubuntu-latest steps: - name: Backup production DB run: | mysqldump -h prod-mysql -u ${{ secrets.DB_USER }} -p${{ secrets.DB_PASSWORD }} mydb > backup-$(date +%Y%m%d-%H%M%S).sql - nam