数据库迁移应在CD阶段部署时执行,CI阶段仅用内存数据库测试;生产环境通过–force参数安全运行migrate,并配合备份与零停机策略。

在 Laravel 的 CI/CD 流程中运行数据库迁移,需要根据环境谨慎处理。数据库迁移通常不应在自动化测试或构建阶段直接作用于生产数据库,但可以在部署流程中安全执行。
理解何时运行迁移
CI(持续集成)和 CD(持续部署)职责不同:
CI 阶段:主要用于代码检查、单元测试、功能测试等,一般使用 SQLite 或临时数据库,不需要真实迁移。CD 阶段:代码部署到预发布或生产环境时,才需要执行 migrate 命令更新数据库结构。
在 CI 中准备数据库(用于测试)
如果测试需要数据库支持,推荐使用内存数据库或重建测试数据库:
– 在 phpunit.xml 中设置数据库连接为 SQLite 内存模式。
– 使用 RefreshDatabase trait,在测试前后自动迁移和回滚。
– 在 CI 脚本中运行:
php artisan migrate:fresh --seed (仅限测试数据库)
在 CD 阶段安全执行迁移
部署到正式环境时,通过部署脚本触发迁移:
使用 Envoy 或部署工具(如 Envoyer、Forge、Capistrano)在代码拉取后执行:php artisan migrate --force–force 是必须的,避免在生产环境交互确认。确保 .env 文件正确指向目标数据库。建议配合备份策略,迁移前自动备份数据库。
结合 GitLab CI / GitHub Actions 示例
以 GitHub Actions 为例,CD 阶段片段:
name: Deploy to Production
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
– name: Checkout code
uses: actions/checkout@v4
– name: Run migrations
run: php artisan migrate –force
env:
DB_CONNECTION: mysql
DB_HOST: ${{ secrets.DB_HOST }}
DB_DATABASE: ${{ secrets.DB_NAME }}
DB_USERNAME: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASS }}
注意:实际部署中建议将迁移与应用代码解耦,或使用零停机部署策略。
基本上就这些。关键点是区分测试和生产行为,确保迁移只在受控环境下执行,避免数据风险。
以上就是laravel怎么在CI/CD流程中运行数据库迁移_laravel CI/CD流程数据库迁移执行方法的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/193483.html
微信扫一扫
支付宝扫一扫