当前位置: 首页 > 面试题库 >

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

冷正青
2023-03-14
问题内容

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

  1. SVN的签出代码
  2. 编译程序
  3. 部署到服务器上的预定义位置
  4. 更改数据库配置(甚至可能尚未识别其他配置)以指向适当的数据库
  5. 执行程序
  6. 执行质量检查流程以验证输出

我目前难以达到上述第4点。每个程序的所有与DB相关的配置都驻留在database.xml文件中,并且一个程序可以连接到1个或多个DB。

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

请让我知道其他人是否也使用了相同的标准方法来达到相同的效果。

TIA


问题答案:

一些方法:

使用一些网络平台,例如:

  • zookeeper
    • http://www.therore.net/java/2015/05/03/distributed-configuration-with-zookeeper-curator-and-spring-cloud-config.html
  • spring
    • https://www.baeldung.com/spring-cloud-configuration
    • 这是java spring框架的功能,您可以使用配置创建属性文件,并配置应用程序以读取它们。
  • 魔法属性管理
    • 这是一个Java Web系统,您可以在其中创建环境以及每个环境中的任何key:value。您只需要以任何语言配置应用程序即可读取该值。
  • 网络资产管理
    • 这是一个nodejs应用程序,允许您存储属性文件(.properties.yml或.json),然后将其用作应用程序的其余端点。

使用这种方法,当需要更改配置时,您只需要更新系统中的值并重新启动应用程序即可。甚至有可能在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等
  • 创建一个詹金斯工作,并将 环境 作为参数。
  • 在同一作业中,下载应用程序的svn源代码。
  • 下载名为 $ environment-configurations的 svn存储库。 $ environment 将是您的论点
  • $ environment-configurations 存储库的database.xml替换应用程序内部的database.xml 。
  • 只需创建另一个存储库即可进行测试,测试和生产。作业必须以接收环境作为选择正确数据库的参数。

数据库中的属性

修改您的应用程序以从某些数据库而不是xml文件读取配置

文件系统的属性

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



 类似资料:
  • 问题内容: 我有一个处于测试版模式的应用程序。此应用程序的模型具有一些带有显式primary_key的类。因此,Django使用字段并且不会自动创建ID。 我认为这是个坏主意(在django admin中保存对象时,请参见unicode错误),我想回过头来为模型的每个类提供一个ID。 我已经对模型进行了更改(将每个primary_key = True替换为db_index = True),并且我想

  • 问题内容: Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。 为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。 分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统? 问题答案: 有多种解决方案,取决于你的发行要求。 只是用一个jar。这

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?

  • 问题内容: 我在应用程序中使用Redis,既用于Sidekiq队列,也用于模型缓存。 考虑到将要在Redis上使用的模型将同时从我的Web应用程序(通过Puma运行)和Sidekiq内部的后台作业中被调用,使模型具有Redis连接的最佳方法是什么? 我目前正在初始化程序中执行此操作: 然后在整个代码中简单地使用/ (和类似的代码)… 据我了解,这应该是线程安全的,因为Redis客户端一次只能使用M

  • 问题内容: 所以,我要做的是在特定网页上运行一个函数(与我的正则表达式匹配)。 现在,我每秒检查一次,并且它可以正常工作,但是我敢肯定,有更好的方法(因为它使网站充斥着大量请求)。 我当时想以某种方式做到这一点,但不确定如何做到。 问题答案: 我当时想用WebDriverWait做到这一点 究竟。首先,查看内置的“预期条件”是否可以解决以下问题: 用法示例: 如果不是,则可以始终创建自定义的“预期

  • 我在Google App Engine(灵活环境)上使用React和Node。 我希望能够根据环境设置更改我的应用程序的配置:生产还是开发。 在开发中,我有以下设置:我在浏览器中使用localhost:5050运行我的react应用程序,并在package.json中的localhost:8080上运行node应用程序我使用代理:“Proxy”:“http://localhost:8080”API