我想知道存储配置设置的一些最佳实践.假设您在多个应用程序中共享了一些设置.我听说过存储这些需要共享的设置(XML文件)的好方法和坏方法.
只是想知道在跨构建维护应用程序设置方面的优秀标准是什么,以便于部署.
我想我正在从两个场景中看到这个:
添加-1:
谢谢.我听说过恐怖故事,有些地方在多个应用程序中管理配置设置.我不是一个构建人,所以我不知道为什么,但我想确保我现在理解它在web.config与自定义配置文件等方面的类型.
添加-2:
那么当你创建一个要消耗的API时呢?你可以说一个类会提取某些配置信息,但是在客户端使用你的API(特别是C#/ .NET)之前,这些端点(属性)没有定义?您在何处以及如何设置这些属性,例如您创建的配置类,如"ApplicationDefinitions"?
在提出我的问题之前,让我先介绍一些背景信息:
我最近加入了一个新的软件开发小组,该小组使用Rational工具进行配置管理,包括源代码管理和变更管理系统.除了这些工具之外,团队还有一个标准做法,即在代码中注明任何代码更改,例如:
///<history>
[mt] 3/15/2009 Made abc changes to fix xyz
///</history>
Run Code Online (Sandbox Code Playgroud)
他们评论标准的官方目的是"评论提供从需求到代码修改的可追溯性".
我准备提出一个论点,即这种做法是不必要和多余的; 团队应该立即摆脱这个标准.
也就是说 - 变更管理系统是构建从需求到代码修改的可追溯性的地方,源代码控制可以通过执行版本之间的差异来提供更改的详细历史记录.签入源代码时,会记录相应的更改管理票证.解析CM票证后,我们会注意修改了哪些源代码文件.我相信这为所需的可追溯性提供了足够的交叉参考.
我想知道是否有人不同意我的论点.我是否遗漏了注释源代码历史的一些好处,即管理和源代码控制系统无法提供变更?
我已经以递归方式将标签应用于目录.如何删除所有这些标签?
我阅读了一些文章,声明应该将应用程序配置/参数保留在版本控制之外,并在生产环境中设置为环境变量.
我的问题是:你如何管理这些环境变量?
使用像Puppet这样的配置管理工具?如果您要部署新版本的应用程序并需要添加一些新的配置变量,该怎么办?
您的部署脚本可能也在版本控制中,因此如果您在其中设置任何生产变量,那么每个具有部署访问权限的人都可以看到它.(以及像Capistrano这样的工具将部署脚本与应用程序源代码一起存储.)
这有什么常见的做法?谢谢您的帮助.
environment-variables configuration-management production-environment
我是 Netflix archaius 的新手。我有一个读取 Java 属性文件并打印属性值的代码片段。
当该程序运行时,它会打印 testproperty.properties 文件中名为“Fields”的属性的值。现在,当该程序运行时,我正在更新“Fields”属性的值,因此 archaius 应该动态获取更改值。但它仍在打印旧值。
在这个 Java 程序中使用 archaius 的正确方法是什么?或者在不重新启动程序的情况下更新程序中的属性?如果有人可以指出此代码片段中的更正,那将会很有帮助。
我想用Netflix archaius运行一个演示,所以我在我的项目中通过maven导入了archaius。
现在我正在更新我的属性文件。但它仍然打印旧的财产价值。(PS:我在驱动程序中保留了连续的 while 循环,以查看 archaius 是否在运行时选择更新属性值。我想这就是 archaius 应该做的。获取更新的属性而不重新启动应用程序。如果我错了,请纠正我。)
下面是我的代码片段:
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.config.DynamicStringProperty;
public class PropertyChangetest {
public static void main(String args[]) {
DynamicPropertyFactory sampleProp = DynamicPropertyFactory.getInstance();
System.setProperty("archaius.configurationSource.defaultFileName", "TestProperty.properties");
System.setProperty("archaius.fixedDelayPollingScheduler.delayMills", "500");
while(true) {
DynamicStringProperty sampleProp1 = sampleProp.getStringProperty("fields","");
System.out.println(sampleProp1.get());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的“TestProperty.properties”文件只有一个名为“字段”的属性。运行程序后,我正在更新我的属性文件,但它仍然打印旧值。
java netflix configuration-management apache-commons-config netflix-archaius
问题
我们使用java WAR文件并将配置文件保存在s3存储桶中.我们的环境:DEV,QA,Stage和PROD都有自己的配置文件和s3桶.如果我添加一个新字段,例如"Polling_RATE = 5000",则必须手动将其添加到每个env,因为这些配置文件还存储密码,因此它们不能绑定到应用程序或保存在Github中.并非每个工程师都可以访问每个环境,因此您必须记住在prod部署日期之前通知上级工程师(DEVOPS),以便为应用程序添加新字段.这是一个非常混乱的过程.
题
是否有用于处理此问题的实用程序或架构设计模式?你如何"版本控制"你无法存储在github中的敏感配置字段?
java continuous-integration amazon-s3 configuration-management devops
如果你看一下设置的主机是SaltStack,那么它有时候就像用vi查看二进制文件一样.
您不知道配置文件是如何创建的.
这会很难解决问题.文件来源的逆向工程需要花费太多时间.
我的目标:通过查看minion(由salt创建)上的unix配置文件到配置来源的源,可以轻松找到方法.就像$Id$在svn和cvs中一样.
我和朋友的一个想法是:
状态file.managed应该(可选)添加文件的源.
例:
我的sls文件包含这个:
file_foo_bar:
file.managed:
- source:
- salt://foo/bar
Run Code Online (Sandbox Code Playgroud)
然后,创建的文件应包含此注释.
# Source: salt://foo/bar
Run Code Online (Sandbox Code Playgroud)
当然这并不简单,因为将注释放入配置文件有不同的方法.
这可行吗?或者是否有更好的解决方案来实现我的目标.
更新
通常我知道我做错了什么,并且可以轻松找到根.如果有几个人在州树上工作,就会出现问题.
debugging reverse-engineering configuration-management salt-stack
我正在编写一本手册来设置开发环境并为项目构建管道.我希望尽可能地将playbook与实际基础设施分离,并且只依赖于组,因此我可以使用相同的命令在本地VM和裸硬件中设置管道,只需使用不同的组限制器.
现在的问题是,使用本地Vagrant盒子我需要将用户流浪者添加到docker组,而裸机服务器则需要一些任意用户.在剧本中处理这些变化的最佳做法是什么,尽可能保持抽象?我应该使用行为参数,主机变量,组变量,条件或事实收集这类东西吗?
是否有可能或合理地保持剧本完全抽象,没有任何硬编码的价值和对任何环境的适应性?
virtual-machine configuration-management ansible docker ansible-playbook
我正在使用 .NET Framework 4.6.1 开发 C# WPF MVVM 应用程序,我在 App.config 中有一个自定义部分:
<configuration>
<configSections>
<section name="SpeedSection" type="System.Configuration.NameValueSectionHandler" />
</configSections>
<SpeedSection>
<add key="PrinterSpeed" value="150" />
<add key="CameraSpeed" value="150" />
</SpeedSection>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我想修改PrinterSpeed和CameraSpeed从我的应用程序。我试过这个代码:
static void AddUpdateAppSettings(string key, string value)
{
try
{
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error writing app settings");
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为我没有修改AppSettings部分。 …
目前,我有配置文件存储在GitHub中。我有如下格式单一的JSON文件
{
DEV:
{ key1 : val1, key2 : val2 },
PROD:
{ key1 : val1, key2 : val2 }
}。
我的构建系统克隆了git repo,构建了项目并创建了Docker映像,并将其存储在私有Docker注册表中。我将jar文件和配置文件复制到Docker映像中。每当我启动一个容器时,我都会注入一个环境变量(ENV = DEV / PROD),我的代码将使用该变量读取基于环境的配置。
我在这里有几个问题:
维护特定于环境的配置的最佳方法是什么?
配置文件可能包含敏感数据,例如api密钥和机密信息,在构建Docker映像时如何加密,存储和解密?
configuration-management continuous-deployment docker devops