【问题标题】:Git: application configuration and different environmentsGit:应用程序配置和不同的环境
【发布时间】:2011-03-13 22:38:09
【问题描述】:

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

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

理想情况下,我想要一种将配置文件“锁定”在某个分支中的方法,这样每当我签出 master 时,我都会得到 master 配置文件,而每当我签出 staging 时,我都会得到 staging 配置文件。此外,将 staging 合并到 master 不应以任何方式影响 master 配置文件。迄今为止,我们已经通过在 git 根目录之外创建包含特定环境配置文件的文件夹并在部署时手动将适当的文件移动到代码库中来解决这个问题,但这当然是不必要的骇客(并且有潜在危险)。

有没有办法使用 git 来完成这个任务?

感谢您的考虑!

【问题讨论】:

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


【解决方案1】:

不知道为什么人们认为他们可以在没有某种安装工具的情况下逃脱。 Git 是关于跟踪源代码,而不是关于部署。您仍然应该有一个“make install”类型的工具来从您的 git 存储库转到实际部署,并且该工具可能会执行各种操作,例如模板扩展或选择备用文件。

例如,您可能已将“config.staging”和“config.production”签入到 git,当您部署到 staging 时,安装工具会选择“config.staging”复制到“config”。或者您可能有一个“config.template”文件,该文件将被模板化以在部署中生成“config”。

【讨论】:

  • 是的,这通常是我做事的方式。我使用了一个部署工具(我主要使用 Django,所以我使用 Fabric,或者在我正在开发 Rails 应用程序的极少数情况下使用 Capistrano)在部署时自动移动或设置符号链接到正确的配置文件。
【解决方案2】:

您可以尝试使用 post-merge 或 post-checkout 挂钩来验证一切是否正常,否则请修复它。这实际上是seems to be suggested by the ProGit book。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      试试https://microconfig.io

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-30
        • 1970-01-01
        • 2012-04-12
        相关资源
        最近更新 更多