【发布时间】:2017-01-15 02:01:12
【问题描述】:
我有一个 Laravel 项目(iOS 应用程序的 API),目前正在设置一个持续集成服务器 (Jenkins) 来处理 AWS 的部署。我正在使用 Capistrano、Packer 和 Terraform 等工具来完成此任务。
目前,该应用有两种环境:暂存和生产。
但是,我正在尝试找到一种在此系统中使用数据库的好方法。
基本上,我设想管道类似于:
- 签出代码
- 运行测试
- 部署暂存 AMI 并建立新的基础架构
- QA 并将 AMI 部署到生产环境
但是,在第 3 步和第 4 步之间,我希望对生产部署进行“试运行”——也就是说,尝试迁移,并访问生产中可能拥有的大型数据集.
所以我看到了 2 个选项:
1) 当我们准备好进行 QA 时,导出 Production DB 并将其导入 Staging。然后运行“进程”(迁移、terraform、packer 等)。如果一切顺利,进入生产阶段
优点:
- 您可以在文字生产数据集上尝试一切,因此您有信心一切都会奏效
- 您开始使用大型数据集,并查看与典型暂存环境相比是否存在大量记录导致的瓶颈
缺点:
- 最终,生产数据库可能会变得非常大,并且导出 每天或一天几次,可能会变得非常缓慢
- 与上述类似,这会导致持续集成非常缓慢
2) 不要从生产环境中导入,而是为所有数据库模型编写可配置的播种器,并根据 QA 的需要运行。
优点:
- 您可以使用小型或大型数据集为数据库播种,具体取决于您对该特定部署的需求
- 播种机只是一个简单的脚本,可以非常快速地运行
缺点:
您必须让播种机及时了解您所做的任何模型更改。
一般而言,与从生产中导出实际数据集相比,此过程似乎更容易出现人为错误。
人们一般如何处理这个过程?
【问题讨论】:
标签: amazon-web-services jenkins continuous-integration terraform