Configuration 环境间的配置升级

Configuration 环境间的配置升级,configuration,configuration-files,environment,configuration-management,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在测试时需要指向测试资源,在暂存环境中需要指向暂存资源,在产品上需要指

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

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

user.auth.endpoint=http://some.url/user
user.auth.apikey=abcd12314
问题是,
user.auth.endpoint
在测试时需要指向测试资源,在暂存环境中需要指向暂存资源,在产品上需要指向生产资源

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


管理这个的好方法是什么?我应该搜索什么工具?

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

Env-vars很容易在部署之间进行更改,而无需更改任何代码; 与配置文件不同,它们被检入的可能性很小 代码回购意外;与自定义配置文件或其他 配置机制,例如Java系统属性,它们是一种语言- 和操作系统不可知标准


我知道三种方法

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

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

第三种方法(如果你使用C++或java)是使用开源库(免责声明,我是它的主要开发者)。我建议您阅读“Config4*入门”手册的第2章,了解其灵活的语法如何使单个配置文件适应多个环境。

您可以查看。使用1个配置文件,并在环境之间切换/tab。在内部,它只是一个配置文件,它处理环境变量并为特定环境生成配置文件。在配置术语中,您有一个Prod环境,其中有20多个实例。您将拥有一个Prod环境配置,您可以使用web界面相应地调整20多个实例

您已将特定于环境的属性移动到一个单独的文件中,但使用Config,您不必这样做。使用Config,您可以有1个配置文件,支持环境变量,并将公共配置应用于所有环境


请注意,我是配置团队的一员。

非常好的链接!我并不反对使用env-vars,但我仍然在同一条船上;在本地,我得到了
导出一些_CONFIG=/location/of/resource
,这在每个环境中都是不同的。我如何才能在不依赖于告诉别人并冒着他们错误输入环境变量的风险的情况下将其推广到生产中?我猜您正在寻找类似于我工作的产品的产品:但除了memcached之外,我不知道有什么独立的解决方案。