Jenkins 在CI环境中更改应用程序配置的最佳方法是什么

Jenkins 在CI环境中更改应用程序配置的最佳方法是什么,jenkins,continuous-integration,jenkins-pipeline,Jenkins,Continuous Integration,Jenkins Pipeline,我目前正在Jenkins管道上进行POC,以了解如何在CI环境中配置我的产品。管道的要求如下: 来自SVN的签出代码 编译程序 部署到服务器上的预定义位置 更改数据库配置&甚至可能是其他尚未标识的配置,以指向相应的数据库 执行程序 执行QA流程以验证输出 我目前难以达到上述第4点。每个程序的所有数据库相关配置都位于database.xml文件中&一个程序可以连接到一个或多个数据库 鉴于开发人员可以自由签入任何数据库配置,我仍然希望我的CI环境指向预定义的数据库进行测试。我不确定如何动态更改这些配

我目前正在Jenkins管道上进行POC,以了解如何在CI环境中配置我的产品。管道的要求如下:

来自SVN的签出代码 编译程序 部署到服务器上的预定义位置 更改数据库配置&甚至可能是其他尚未标识的配置,以指向相应的数据库 执行程序 执行QA流程以验证输出 我目前难以达到上述第4点。每个程序的所有数据库相关配置都位于database.xml文件中&一个程序可以连接到一个或多个数据库

鉴于开发人员可以自由签入任何数据库配置,我仍然希望我的CI环境指向预定义的数据库进行测试。我不确定如何动态更改这些配置文件来实现这一点

请让我知道是否有其他人也在使用的标准方法来实现同样的目标

TIA

一些方法:

使用高级平台的属性 使用一些web平台,如:

这是一个JavaSpring框架功能,您可以使用配置创建属性文件,并配置应用程序以读取它们。 这是一个JavaWeb系统,您可以在其中创建环境和每个环境中的任意键:值。您只需用任何语言配置应用程序即可读取这些值。 这是一个nodejs应用程序,允许您存储属性文件.properties.yml或.json,然后将它们作为应用程序的rest端点使用。 使用这种方法,当需要更改配置时,只需更新系统中的值并重新启动应用程序。甚至可以在java应用程序中进行热重新加载

来自环境变量的属性 在启动应用程序之前,可以将key:value属性导出为环境变量:

export DATABASE_HOST=10.100.200.300
export LOG_DIR_LOCATION=/logs
并在应用程序启动后阅读:

Java >> System.getEnv("DATABASE_HOST"); 
node.js >> process.evn.LOG_DIR_LOCATION
php >> getenv('DATABASE_HOST')
来自SCM的属性 创建一些称为开发配置的svn报告 上载带有开发值的database.xml 在应用程序中,放置一个带有伪值的database.xml:localhost等 创建jenkins作业并将环境作为参数。 在同一个作业中,下载应用程序的svn源代码。 下载名为$environment Configuration的svn存储库$环境将是你的论据 将应用程序中的database.xml替换为$environment configurations repository的database.xml。 只需为测试、uat和生产创建另一个存储库。作业必须以接收环境作为参数,才能选择正确的database.xml 来自数据库的属性 修改应用程序以从某些数据库而不是xml文件读取配置

来自文件系统的属性 修改应用程序以读取源代码中的外部database.xml,而不是database.xml。使用这种方法,您只需将database.xml放在服务器的某个路径中,然后将其从应用程序源代码中删除

笔记 您不仅可以将这些方法用于后端应用程序。您可以将其用于前端应用程序:


配置文件并非严格意义上的源代码,因此VCS不是管理依赖于环境的配置的最佳选择。您可以为不同的配置保留单独的分支,但是将源代码更改合并到所有配置中太耗时了。就扩展能力和自动化而言,将自动资源调配构建到应用程序中无疑是更好的方法,但也存在一些缺点,如潜在的安全风险、攻击面以及需要网络或互联网连接才能访问集中存储的配置数据。Thx@JRichardsz。我已经想到了第二点,但我想看看人们是否有标准的方法来实现这一点。将进一步研究第1点中的选项,尽管我怀疑我是否能够对我们的应用程序进行必要的更改!!只要有时间和咖啡,一切都是可能的。如果没有时间,就需要更多的咖啡。什么是应用程序语言?所有的程序都在Java/Spring批处理中。Java和Spring是难以置信的可配置的:D.你的读取datbase.xml的应用程序是用Spring批处理开发的?如果您的答案是肯定的,那么方法1是非常可能的。甚至可以使用spring云配置,因为它是spring。如果可以,请将应用程序的安全版本hello world maybe上载到github,并与我共享帮助youThx@JRichardsz的链接。我的怀疑不是因为项目的技术能力,而是因为我们组织中的变更管理过程:无论如何,感谢您的帮助。