我正在为Spring应用程序(Maven)提供以下部署管道。
构建 - > DEV - > TST - > PROD
war文件在第一步中构建,然后复制到每个环境。我现在面临的问题是我需要不同环境的不同属性。我创建了以下属性文件:
自动为每个部署步骤分配正确的环境以便自动选择每个环境的相应属性文件的最佳做法是什么。
对于本地测试,我使用了以下内容。但我不知道如何将其转移到詹金斯。
-Drun.jvmArguments = “ - Dspring.profiles.active =” INT“
答案 0 :(得分:1)
最好的方法是遵循12 FActor App原则,其中所有属性都通过环境变量传递到您的应用中。这符合“云原生”应用程序。
但如果您不想这样做,您可以按照您描述的方式使用它。属性spring.profiles.active
将在运行时配置,而不是在Jenkins构建中配置。所有配置文件都可以包含在WAR文件中。它非常不灵活,因为随着一些环境属性的改变,你需要开始新的构建 - >新版本。
这种方法的最大问题是它无法扩展。在云环境中,您可能希望拥有许多具有不同配置的不同PROD环境。如果使用单个配置文件对WAR工件锁定配置,则只有一个PROD配置。
某些部署系统的工作方式是配置文件具有占位符,并在部署期间替换这些占位符。因此,您可以拥有一个PROD配置文件,但部署管道将使用不同PROD节点的值替换占位符。
答案 1 :(得分:0)
我认为你有几种选择:
如果您坚持在所有环境中使用相同的构建战争,可以在Jenkins中添加Global MAVEN_OPTS
:转到主菜单Manage Jenkins->Configure System
并尝试设置Global MAVEN_OPTS
:
-Dspring.profiles.active=int
另一个选择应该是使用Maven配置文件与Jenkins中的相应属性文件构建特定的war。因此,在您的Jenkins作业配置中,在构建步骤中添加goals and options
maven命令(对于clean install –Pint
,其中" int"是Jenkins的Maven个人资料ID