在 Jenkins 或 CI 中提供特定于服务器的配置文件的正确方法是什么?



在CI中,我们通常取出新的副本,并检测到存储库的更改并开始构建。但是在某些情况下,各种服务器的本地存储库在其配置文件中具有不同特定于每个服务器的常数的值不同(邮件地址可能有所不同,或者在特定服务器上启用/禁用日志记录)。

我的问题是处理CI理念中这些更改的最佳方法是什么,无论是否在每个服务器上取出新副本后,应手动进行与服务器相关的更改(一次),然后我们应遵循正常过程通过SVN

检测对存储库的更改

这是我在工作场所做的方式:

我将配置文件保存在SVN,每个服务器类型中的每个环境中。这样的事情-devproj1
--- API
----- api_config_file
--- Web
----- web_config_file
-Qaproj1
--- API
----- api_config_file
--- Web
----- web_config_file
- prodproj1
--- API
----- api_config_file
--- Web
------ web_config_file

以这种方式,POD上的所有API服务器都将使用来自PRODPROJ1/API/api_config_file的SVN的配置文件,而DEV上的所有API服务器都将使用DEVPROJ1/API/api_config_file的SVN中的配置文件。

我的部署脚本比部署到每个服务器的特定配置。这是通过告诉部署脚本来实现的:
部署到API:PRODPROJ1=10.0.0.1,API:PRODPROJ1=10.0.0.2。然后,该脚本从SVN中的ProdProj1进行API配置。

您可以看到,我为所有API使用通用配置文件。有时每个API都需要特定的更改,例如本地IP地址。这些在安装时由部署脚本替换。您可以使用类似的方法,但是您可以通过环境(DevProj1,Qaproj1)将它们分开,而可以通过IP地址或机器名称进行分开。

无论哪种方式,我都更喜欢将我的所有配置都放在SVN中,可以轻松地跟踪和验证更改,而不是在随机服务器上寻找单个修改。

当然,维护这些配置文件成为手动过程。

最新更新