环境之间的配置升级

时间:2013-05-17 19:25:59

标签: configuration configuration-files environment configuration-management

通过环境协调配置更改的好方法是什么?

为了将我们的代码与环境分离,我们将所有环境配置移动到外部文件。因此,应用程序可能会查找${application.config.dir}/app.properties,而app.properties可能包含:

user.auth.endpoint=http://some.url/user
user.auth.apikey=abcd12314

问题是,user.auth.endpoint需要在测试时指向测试资源,在暂存环境时指向暂存资源,在生产时指向生产资源。

我们可以维护配置文件的不同副本,但这会违反DRY并变得非常笨重(有20多个生产环境)。

管理此内容的好方法是什么?我应该搜索哪些工具?

3 个答案:

答案 0 :(得分:1)

外部化配置是一个好主意,您可以将它们外部化到环境变量。

  

在不更改任何代码的情况下,可以在部署之间轻松更改Env变量;   与配置文件不同,它们被检入的可能性很小   代码回购意外;与自定义配置文件或其他不同   配置机制,如Java系统属性,它们是一种语言 -   和操作系统无关的标准。

来自http://12factor.net/config

答案 1 :(得分:1)

我知道有三种方法。

第一种方法是编写一个Python"包装器"适合您应用的脚本。该脚本将找出一些环境细节,例如主机名,用户名和环境变量的值,然后构造传递给实际应用程序的相应配置文件(或一组命令行选项)。

第二种方法是将脚本语言(Python,Lua和Tcl)的解释器嵌入到您的应用程序中。这使您可以使用该嵌入式脚本语言的语法编写配置文件。通过这种方式,配置文件可以利用脚本语言的功能,例如查询环境变量或执行shell命令(例如hostname)并使用if-then-else语句的功能适当地设置变量。

第三种方法(如果您使用的是C ++或Java)是使用开源Config4*库(免责声明,我是其中的主要开发人员)。我建议你阅读" Config4 *入门"的第2章。手动查看其灵活语法如何使单个配置文件适应多种环境的示例。

答案 2 :(得分:1)

您可以查看http://www.configapp.com。您使用1个配置文件,并在环境之间切换/选项卡。在内部,它只是一个配置文件,它处理环境变量并生成特定环境的配置文件。在Config术语中,您有1个Prod环境,其中包含20多个实例。您将拥有Prod环境配置,您可以使用Web界面相应地调整20多个实例。

您将特定于环境的属性移动到单独的文件中,但使用Config时,您不必这样做。使用Config,您可以拥有1个配置文件,其中包含环境变量支持,以及适用于所有环境的通用配置。

请注意,我是Config团队的成员。