17

我有一个项目需要部署到多个环境(产品、测试、开发)中。主要区别主要在于配置属性/文件。

我的想法是使用配置文件和覆盖来复制/配置专门的输出。但是如果我必须使用专门的分类器生成多个工件(例如:“my-app-1.0-prod.zip/jar”、“my-app-1.0-dev.zip/jar”)或者我应该创建多个项目,每个环境一个项目?!
我应该使用 maven-assembly-plugin 为每个环境生成多个工件吗?无论如何,我需要一次生成所有它们,所以它会显示配置文件不适合......仍然感到困惑:(

任何提示/示例/链接都将受到欢迎。

作为一个附带问题,我还想知道如何在 CI Hudson/Bamboo 中实现这一点,以便为所有环境生成这些生成的工件并将其部署到它们的适当服务器(例如:使用 SCP Hudson 插件)?

4

6 回答 6

10

我更喜欢将配置文件与应用程序分开打包。这允许您运行完全相同的应用程序并在运行时提供配置。它还允许您为构建时不知道需要的环境生成配置文件。例如 CERT 我使用“汇编”工具将每个域的配置文件压缩到命名文件中。

于 2010-03-12T04:52:03.827 回答
2

我将使用该version元素(如 1.0-SNAPSHOT、1.0-UAT、1.0-PROD)以及 VCS 级别的标签/分支与配置文件(用于特定于环境的内容,如机器名称、用户名密码等)来构建各种文物。

于 2010-03-11T15:45:44.537 回答
1

我们使用以下方法实现了一个 m2 插件来构建最终的 .properties:

  • 从 common.properties 中读取常见的环境不感知设置。
  • 从 dev.properties、test.properties 或 production.properties 读取特定的环境感知设置,因此在必要时覆盖默认值。
  • 在按给定顺序读取文件后,最终的 .properties 文件将与 Properties 实例一起写入磁盘。
  • 这样的 .properties 文件是根据目标环境捆绑的。
于 2011-08-22T11:18:47.813 回答
0

我们使用配置文件来实现这一点,但我们只有默认配置文件——我们称之为“开发”配置文件,上面有配置文件,我们有一个“发布”配置文件,其中不包含配置文件(所以它们可以在安装应用程序时正确配置)。

我将使用配置文件来执行此操作,如果您需要部署它,我会将配置文件附加到工件名称中。我认为这与 Pascal 的建议有些相似,只是您将使用配置文件而不是版本。

PS:我们只有 dev/release 配置文件的另一个原因是,每当我们为 UAT 或 PROD 发送一些东西时,它就已经发布了,所以如果有错误,我们可以追踪应用程序运行时的代码状态。已发布 - 在 SVN 中标记它比尝试从提交历史中找到它的状态更容易。

于 2010-03-12T04:59:17.350 回答
0

去年夏天我遇到了这种情况。

我最终使用分类器为每个更高的环境使用配置文件。默认配置文件是“不伤害”开发版本。我有一个 DEV、INT、UAT、QA 和 PROD 配置文件。

我最终在 Hudson 中定义了多个工作以生成特定于区域的工件。

我会做不同的一件事是对项目进行稍微不同的架构,以便特定区域的构建在模块化主项目之外。那就是它只会为每个特定构建引入最新的工件,而不是为每个区域重建整个项目。

事实上,当我设置作业时,QA 和 PROD 作业总是设置为构建一个标签。显然,这是您将根据您的特定工作场所部署规则量身定制的东西。

于 2010-03-15T15:59:53.810 回答
0

尝试使用https://github.com/khmarbaise/multienv-maven-plugin为每个环境创建一个主 WAR 和一个配置 JAR。

于 2017-09-27T01:52:01.963 回答