问题描述
作为一个组织,我们正在(终于)转向一个良好的CI/CD设置。我们在开发中使用Github,并且现在有一个很好的CI设置,可以自动将特定的标签部署到不同的环境中。
现在,我想设置一个系统,在每个Pull Request的生命周期中都有一个活动环境,直到它被合并或关闭。但是我不确定如何创建每个环境的数据库,并保持良好的数据状态。我自己想到了多种解决方案,但也许这里的人们有不同的见解。
到目前为止,我考虑过以下几种方法:
1. 只连接到staging数据库。优点:设置可能最简单。缺点:使用数据库迁移非常困难。
2. 创建staging数据库的副本,并在分支完成后删除它。优点:可能是最好的数据库状态管理。缺点:我不确定如何自动创建新数据库的访问凭据。
3. 拥有优秀的种子数据,并使用该数据创建一个新的数据库。优点:可能也非常容易设置。缺点:开发人员需要确保种子数据是最新的。
为了更好地理解背景,我们是一个项目为基础的组织,所以我们有很多不同的项目为不同的客户进行。
我想知道其他公司是如何管理这个问题的。
评论1:创建大型数据库的完整副本并不困难,但是创建大型敏感数据的完整副本可能非常昂贵和有问题。我曾在一个大型组织工作过,他们使用Delphix进行数据库虚拟化,使用较少的空间创建数据环境,并对敏感数据进行匿名化处理(他们不希望大型开发/测试团队使用客户敏感数据)。我没有亲自使用过它,但使用过的团队似乎对它很满意。我不确定他们是否按照每个PR自动化,更像是设置了一组测试环境,并在一个稳定的环境中运行CI。
评论2:请说明您使用的数据库,因为更成熟的数据库有一些功能可以更轻松地共享数据存储。
评论3:此外,您能否提供有关数据的“新鲜度”和“敏感性”的一些指示?一个公司可能能够在任何旧的数据库副本上进行测试,该副本具有旧的数据,但某些组织更加动态,希望对最近的副本进行测试,该副本具有经过匿名化处理的敏感个人和财务数据。
评论4:我认为当前提出的问题可能会得到很多不同的答案,这些答案对于您的公司或其他任何公司来说都不是最佳解决方案。我们应该避免提出不具体、开放式的问题。请编辑您的问题,使其更具体,以便帮助未来有类似需求的人们。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1:连接到staging数据库
这种方法最简单,只需连接到staging数据库即可。但是,由于数据库迁移的困难,这种方法可能很难管理。如果您决定使用这种方法,请确保您有一个良好的数据库迁移策略,以确保数据库的一致性和可靠性。
方案2:创建副本数据库
这种方法是创建staging数据库的副本,并在分支完成后删除它。这是最好的数据库状态管理方法,但是如何自动创建新数据库的访问凭据可能是一个问题。您可以考虑使用一些自动化工具或脚本来处理这个问题。以下是一个示例脚本,可以帮助您自动创建新数据库的访问凭据:
#!/bin/bash
# 创建新数据库
docker run -d --name new_database your_image
# 生成访问凭据
access_credentials=$(docker exec new_database generate_access_credentials)
# 将访问凭据保存到安全的位置
echo $access_credentials > access_credentials.txt
在上面的示例中,我们使用docker run
命令创建了一个新的数据库,并将其命名为new_database
。然后,我们使用docker exec
命令在新数据库中生成访问凭据,并将其保存到一个安全的位置(如access_credentials.txt
文件)中。
方案3:使用种子数据创建新数据库
这种方法是使用优秀的种子数据来创建一个新的数据库。这种方法可能也非常容易设置,但是开发人员需要确保种子数据始终是最新的。您可以考虑使用一些自动化工具或脚本来处理这个问题。以下是一个示例脚本,可以帮助您自动创建新数据库并使用种子数据:
#!/bin/bash
# 创建新数据库
docker run -d --name new_database your_image
# 导入种子数据
docker exec new_database import_seed_data
在上面的示例中,我们使用docker run
命令创建了一个新的数据库,并将其命名为new_database
。然后,我们使用docker exec
命令在新数据库中导入种子数据。
请根据您的具体需求选择适合您的解决方案,并根据需要进行自定义和调整。
评论1:创建大型数据库的完整副本并不困难,但是创建大型敏感数据的完整副本可能非常昂贵和有问题。我曾在一个大型组织工作过,他们使用Delphix进行数据库虚拟化,使用较少的空间创建数据环境,并对敏感数据进行匿名化处理(他们不希望大型开发/测试团队使用客户敏感数据)。我没有亲自使用过它,但使用过的团队似乎对它很满意。我不确定他们是否按照每个PR自动化,更像是设置了一组测试环境,并在一个稳定的环境中运行CI。
评论2:请说明您使用的数据库,因为更成熟的数据库有一些功能可以更轻松地共享数据存储。
评论3:此外,您能否提供有关数据的“新鲜度”和“敏感性”的一些指示?一个公司可能能够在任何旧的数据库副本上进行测试,该副本具有旧的数据,但某些组织更加动态,希望对最近的副本进行测试,该副本具有经过匿名化处理的敏感个人和财务数据。
评论4:我认为当前提出的问题可能会得到很多不同的答案,这些答案对于您的公司或其他任何公司来说都不是最佳解决方案。我们应该避免提出不具体、开放式的问题。请编辑您的问题,使其更具体,以便帮助未来有类似需求的人们。