Deployment 如何在组织范围内处理特定于环境的应用程序配置? 问题
您的组织有许多独立的应用程序,其中一些相互作用(形成“系统”)。您需要将这些应用程序部署到单独的环境中,以便于分阶段测试(例如,开发、质量保证、用户体验、产品开发)。给定的应用程序需要在每个环境中稍微进行不同的配置(例如,每个环境都有一个单独的数据库)。您希望通过某种自动机制来处理这种重新配置,这样您的发布经理就不必在每次将每个应用程序部署到不同的环境时都手动配置它 所需功能 我希望设计一个具有以下属性的组织范围内的配置解决方案(理想情况下):Deployment 如何在组织范围内处理特定于环境的应用程序配置? 问题,deployment,configuration,Deployment,Configuration,您的组织有许多独立的应用程序,其中一些相互作用(形成“系统”)。您需要将这些应用程序部署到单独的环境中,以便于分阶段测试(例如,开发、质量保证、用户体验、产品开发)。给定的应用程序需要在每个环境中稍微进行不同的配置(例如,每个环境都有一个单独的数据库)。您希望通过某种自动机制来处理这种重新配置,这样您的发布经理就不必在每次将每个应用程序部署到不同的环境时都手动配置它 所需功能 我希望设计一个具有以下属性的组织范围内的配置解决方案(理想情况下): 支持“一键式”部署(只需指定环境,部署期间/之后
- 支持“一键式”部署(只需指定环境,部署期间/之后无需手动重新配置)
- 应该有一个“记录系统”,其中指定了一个共享的依赖于环境的属性(例如由许多应用程序共享的数据库连接字符串)
- 支持重新配置已部署的应用程序(在特定于环境的属性需要更改的情况下),理想情况下无需重新部署应用程序
- 允许应用程序在同一台计算机上但在不同的环境中运行(同时运行PROD实例和DEV实例)
您是如何实现解决这些问题并支持这些所需功能的配置解决方案的?我有两种可能的解决方案吗?您对这些解决方案有偏好吗?另外,请随时告诉我,我对这个问题的想法完全错了。任何反馈都将不胜感激。我们都遇到过这种情况,尤其是在大型组织中。我认为最重要的是首先管理您自己的期望,并询问是否确实有必要告诉给定框中的每个系统和子系统“更改为开发模式”或“更改为产品模式”。我个人的建议如下:
希望这有帮助。如果您想讨论更多相关细节,请告诉我。我个人更喜欢解决方案2(通过配置,应用程序应该知道自己运行的环境)。对于解决方案1(将环境名称作为启动参数传递),使用错误的环境说明符的危险太大。从PROD代码访问测试数据库,反之亦然,如果两个已安装的代码库的版本不相同(通常情况下),则可能会造成混乱 我当前的项目使用解决方案1,但我不喜欢这样。我以前参与的一个项目使用了so的变体
var config = {
'ver': '1.0',
'help': {
'BLURB': 'This pre-production environment is not supported. Contact Development Team with questions.',
'PHONE': '808-867-5309',
'EMAIL': 'coder.jen@lostnumber.com'
},
'help@www.productionwebsite.com': {
'BLURB': 'Please contact Customer Service Center',
'BLURB@fr': 'S\'il vous plaît communiquer avec notre Centre de service à la clientèle',
'BLURB@de': 'Bitte kontaktieren Sie unseren Kundendienst!!1!',
'PHONE': '1-800-CUS-TOMR',
'EMAIL': 'customer.service@productionwebsite.com'
},
}
prefer(config,['www.productionwebsite.com','de']); // prefer(obj,string|Array<string>)
JSON.stringify(config); // {
'ver': '1.0',
'help': {
'BLURB': 'Bitte kontaktieren Sie unseren Kundendienst!!1!',
'PHONE': '1-800-CUS-TOMR',
'EMAIL': 'customer.service@productionwebsite.com'
}
}
appsettings.dev.json
appsettings.qa.json
appsettings.staging.json