分享我的这个体验的简化版本。要考虑是否在远程泊坞窗发动机运转依赖(B
,C
和D
)甚至是值得冒这个险,必须执行以下中的一个(通常)是真实的:
- 资源由不同的服务使用量不适合在单个开发人员计算机上运行。
- 初始化依赖服务的数据过于麻烦,因为其大小或其他因素使其在本地运行时太繁琐。
- 通过根据服务使用的数据引发隐私担忧
什么你可能使用远程方式失去的是一个有点吓人。
- 开发人员无法轻松控制正在运行的依赖服务的版本。如果这些服务是自定义的,这一点尤其重要,以便在问题被发现或修复时降级或升级版本。
- 在转换到更新版本的第三方服务时,它也可能是一个问题,因为并非所有的开发人员都可能在支持它的分支上工作。
- 此外,如果您不需要快速跳回旧版本的分支机构/版本来修复或发布问题,然后将其集成/测试到当前分支,那么当您最需要它时可能会非常沮丧(时间是问题!)
还有很多要添加到这些列表的其他要点,但这些对我们来说很重要。
我们结束了一个混合的方法。
开发人员将在本地为大多数任务运行一切。我们削减了为当地发展提供服务所需的数据,以便他们可以在几分钟内在当地启动。使开发环境完全“脱机”是一个巨大的优势。如果一个中央系统发生故障,您的开发人员将迅速减少到在停机期间漫游大楼的一群僵尸。他们还有能力在火车上打开他们的笔记本电脑,并在需要时调试一些奇怪的问题,然后做出承诺,并让CI系统咀嚼测试,以及在他们继续个人生活的同时进行测试。
另外,我们启动了一些运行依赖服务的docker引擎的虚拟机。这些(主要)live
和dev
名称前缀(以及其他如果需要)并包含来自现场环境的快照。如果需要,开发人员可以使用单独的组合设置。当开发人员试图确定由不良数据导致的问题或使用较大数据集严重缩小的代码时,这可能很实用。
从未改变的是A
将始终运行在开发人员计算机上。如果某人出于某种原因有其他需求,我们会启动一个新的VM,其中包括码头引擎,一些数据快照和相关服务。这是一个完全自动化的流程,所以这需要一个完善的高效管道。如果我选择开始个人设置,则主机名可以使用我的用户名作为前缀。
我想说的是,如果开发人员可以在本地运行所有东西,那么可以将自己从大量工作中拯救出来并做到这一点。在几分钟内找到聪明的方式让所有依赖的服务顺利运行。
数据相关性和隐私问题
,因为太多的忽略了这一部分,我将在这里注入了这一点为好。
既然GDPR和Privacy Shield最可能在2018年给隐私问题带来更大的压力(至少在你存储有关欧盟公民的数据时),你的公司将不得不认真对待或者可能面临巨额罚款和/或客户抛弃你。这增加了一些工作。
- 本地服务的所有图像包含生成的数据或不能用于识别个体的实时数据的变换子集。
- 远程
dev
和live
主机还包含转换后的数据以隐藏标识,但简化了一些以大大加快此过程。
- 只有一小部分开发人员可以访问实时系统,并且这些也是唯一允许使用实时数据运行自己的虚拟机的虚拟机(他们获得该主机的唯一客户机证书)。
开发人员每天都会随便携笔记本电脑出行,甚至将其带回家。包含任何形式的个人信息的数据最终都不会在开发人员笔记本电脑上出现。
感谢您的详细,但我仍然不清楚你如何能够管理混合方法?我的意思是技术上 – chaosguru
您使用不同的组合设置注入配置告诉本地容器如何到达外部服务。那么当然必须不断更新外部服务。我们只是每晚或手动做,如果有什么可怕的事情突破。我们用django和芹菜创建了一个服务来轻松管理这个服务,然后扩展到允许产生个人设置。一些开发人员在黑客日期间随着时间的推移建立了这个开发者。 – Grimmy
好吧,让我试试这个东西,并检查。有一点可以肯定的是,在我们的案例中,外部服务得到很好的控制,我认为失败是可预测的。谢谢 – chaosguru