如何在Jenkins中实现数据库的持续集成管理

3
我是一个相对新手的DevOps。尝试为持续集成(CI)组织我的项目时,我面临着一个问题,但我还没有找到解决方案。我想知道在我的设置中管理数据库文件的最佳方式,以便开发人员和Jenkins都可以访问最新版本的DB。
类似的问题已经在各种线程中提及,例如下面的链接。但没有一个回答了我特定情况下的问题。

设置

这是我的设置:

  • 语言: Python 3.5 (带有单元测试等)
  • 数据库: MySQL - 数据每天更新一次(不包括架构)
  • 版本控制: Git
  • 代码托管: Bitbucket
  • 开发操作系统: Windows 10
  • CI机器: Amazon AWS EC2 运行 Linux (Ubuntu 16.04.1)
  • CI工具: Jenkins

我已经设置了CI,以便每当我更新origin/master时,Jenkins就在AWS机器上运行测试。

编辑 为了澄清我的数据库是什么,假设它是某种每日销售数字或每日市场更新。我有一个用于每天更新数据库的代码,另一个程序用于对其进行某种数据分析。

问题

我不关心数据库的版本控制。换句话说,我不在乎我的数据库两天前是什么样子。然而,由于我的数据库每天都会更新,我希望不同的开发系统以及Jenkins在每次运行测试时都能访问到最新的数据库。根据我目前了解到的内容,把数据库包含在Git存储库中并不是好的做法(我也不想这样做,因为我不关心它的更改跟踪)。所以问题是,我应该如何存储我的数据库并将其集成到我的项目中?
有人建议使用Dropbox或其他工具随时访问数据库。这是最好的方法吗?如果是,那么在Dropbox上应该保存什么?实际的数据库(*.db)文件和文件夹?在MySQL中,这些文件被集中保存在MySQL的/data/文件夹中,我不知道如何将它们存储在另一个文件夹(如Dropbox)中。
其他人建议保留DB的转储。这个过程应该是什么样的?在数据库每日更改后生成转储,并将.txt转储文件保存在Dropbox上?Jenkins如何从这些转储文件中重新创建DB?

我理解的是,您在某个地方有一个生产/主数据库,并且希望每天早上您的开发数据库服务器都能更新数据,是这样吗? - Dusan Bajic
我仍然不理解这个问题;如果你有一个数据库服务器,上面有数据,你还需要什么?(可能是因为我从未遇到过类似的用例,所以不明白 :)) - Dusan Bajic
我明白了。不把所有的开发数据库都放在一个中央服务器上有什么原因吗?如果不是每个人都需要写入权限,用户权限可以进行配置,而且如果需要的话,任何人都可以在早上制作本地副本。 - Dusan Bajic
有没有一种免费的方式可以在具有静态IP地址的服务器上托管数据库?我确实有一个便宜的Web托管,但他们没有远程MySQL。我想知道我如何以其他方式远程托管我的数据库。有什么建议吗? - hANI
你的 CI 机器怎么样? - Dusan Bajic
显示剩余2条评论
1个回答

0

我不会移动实际数据。如果可能的话,并且只要满足您的安全需求,我会使连接到您的MySQL服务器从任何地方都可以访问,然后修改连接字符串以指向该服务器。


我仍然不确定我将实际数据库存放在哪里?是在另一个代码库中还是在安全托管中并授予所有用户访问权限,包括Jenkins? - hANI
很难说什么对你来说最好。我可能会单独在一个安全的虚拟机/机器上托管它,并让Jenkins服务器和您的开发机器可以访问它。 - James Rice
现在,阅读了您上面关于限制的评论(无法在那里发表评论,因为我没有所需的声誉,而且我不能在5分钟后编辑我的评论?)。我同意Dusan的意见,将其放在您的Jenkins CI机器上。 - James Rice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接