Git:应用程序配置和不同的环境

时间:2010-07-09 15:19:48

标签: git deployment development-environment configuration-files web-deployment-project

我们对我们在本店中构建的大多数Web应用程序使用git,虽然应用程序本身使用各种技术(PHP,Rails等),但我们通常都有一个分段和生产服务器。现场。通常,这些服务器具有不同的数据库凭证集以及不同的基于环境的配置设置(例如,高速缓存)。我们的工作流程通常涉及为每个项目维护两个git分支:master(反映生产服务器)和staging(反映分段)。在登台(或子分支)上开发了新功能,并在完成和部署后合并回主设备。

我的问题是维护分支和环境特定的配置文件的最佳方法。我已经看到了类似问题herehere的答案,并且都没有真正满足。主要的两种方法似乎是a)使用.gitignore排除将配置文件保留在git的权限之外,或b)编写反射的,环境感知的代码,用于确定例如根据主机名使用哪些数据库凭据。我的问题是a)它只允许一组配置文件存在于代码库中(与当前分支无关),因此其他环境的配置文件会丢失。 b)另一方面,似乎需要以与应用程序功能无关的方式对代码库进行不必要的修改。

理想情况下,我想要一种方法来“锁定”某个分支内的配置文件,这样每当我检查主服务器时,我都会获得主配置文件,每当我检查暂存时,我都会获得暂存配置文件。此外,将分段合并到主服务器不应以任何方式影响主配置文件。到目前为止,我们通过在git root之外包含包含特定于环境的配置文件的文件夹并在部署时手动将适当的文件移动到代码库中来解决这个问题,但这当然是不必要的hackish(并且可能有危险)。

有没有办法用git完成这个?

感谢您的考虑!

4 个答案:

答案 0 :(得分:12)

不确定为什么人们认为没有某种安装工具就可以逃脱。 Git是关于跟踪源,而不是关于部署。您仍然应该使用“make install”类型工具从git repo转到实际部署,此工具可能会执行各种操作,例如模板扩展或备用文件的选择。

例如,您可能已将“config.staging”和“config.production”签入git,当您部署到暂存时,安装工具会选择“config.staging”复制到“config”。或者您可能只有一个“config.template”文件,该文件将在部署中进行“配置”。

答案 1 :(得分:3)

您可以尝试使用合并后或结帐后挂钩来验证所有内容是否应该是,并以其他方式修复它。这实际上是seems to be suggested by the ProGit book

概念基本上是将这些钩子编写为迷你“make install”脚本,以确保按分支,主机,其他文件的存在或内容,以及您喜欢的任何内容进行正确配置。钩子甚至可以重写配置文件或通过填写模板重新创建它们。

答案 2 :(得分:0)

我认为通常,master只保留staging中已有的提交。如果向master添加额外提交,其中包含两个分支之间的配置差异,那么在从staging提取的任何内容之上重新设置此提交应保持配置。这并不像“将staging合并到master不应该以任何方式影响主配置文件”那么简单,但是在这些情况下你会遇到合并冲突,它可能足够接近。

答案 3 :(得分:0)

尝试https://microconfig.io

它专为管理具有多个环境的微服务配置而设计。

您可以拥有基本配置文件和特定于环境的替代。然后使用它为特定的环境生成最终结果。