Maven 2 Maven使用CI/Hudson支持为多个环境[产品、测试、开发]生成工件的最佳实践?

Maven 2 Maven使用CI/Hudson支持为多个环境[产品、测试、开发]生成工件的最佳实践?,maven-2,maven,maven-assembly-plugin,Maven 2,Maven,Maven Assembly Plugin,我有一个项目需要部署到多个环境中(prod、test、dev)。主要区别在于配置属性/文件 我的想法是使用配置文件和覆盖来复制/配置专门的输出。但是如果我必须用专门的分类器生成多个工件(例如:“my-app-1.0-prod.zip/jar”、“my-app-1.0-dev.zip/jar”),或者我应该创建多个项目,每个环境一个项目,我就陷入了困境 我应该使用maven assembly插件为每个环境生成多个工件吗? 不管怎样,我需要一次生成所有的轮廓,这样才能避免轮廓不适合。。。仍然感到困惑

我有一个项目需要部署到多个环境中(prod、test、dev)。主要区别在于配置属性/文件

我的想法是使用配置文件和覆盖来复制/配置专门的输出。但是如果我必须用专门的分类器生成多个工件(例如:“my-app-1.0-prod.zip/jar”、“my-app-1.0-dev.zip/jar”),或者我应该创建多个项目,每个环境一个项目,我就陷入了困境
我应该使用maven assembly插件为每个环境生成多个工件吗? 不管怎样,我需要一次生成所有的轮廓,这样才能避免轮廓不适合。。。仍然感到困惑的是:(

欢迎提供任何提示/示例/链接


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

我将使用
版本
元素(如1.0-SNAPSHOT、1.0-UAT、1.0-PROD)因此,在VCS级别结合配置文件进行标记/分支(针对特定环境,如机器名、用户名密码等),以构建各种工件。

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

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

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


PS:我们只提供开发/发布配置文件的另一个原因是,每当我们为UAT或PROD发送某个内容时,它都已发布,因此如果有bug,我们可以跟踪应用程序发布时代码的状态——在SVN中标记它比从提交历史记录中查找它的状态更容易。

我有这个确切的问题去年夏天的情景

最后,我为每个更高的环境使用了带有分类器的配置文件。默认配置文件是“无害”开发构建。我有一个DEV、INT、UAT、QA和PROD配置文件

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

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


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

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

  • 从common.properties读取公共的、不受环境影响的设置
  • 从dev.properties、test.properties或production.properties读取特定的环境感知设置,从而在必要时覆盖默认值
  • 按照给定顺序读取文件后,最终的.properties文件将与properties实例一起写入磁盘
  • 此类.properties文件是根据目标环境绑定的文件

尝试使用为每个环境创建一个主WAR和一个配置JAR。

嗯……但是PROD的快照版本会是什么样子呢?我考虑改用分类器,所以我可以使用1.0-snapshot-PROD.JAR和汇编插件来生成它们……因为环境/登台问题非常普遍,我认为最好的prac是如果你有一个简单的(和现实的)例子会有所帮助alot@jaguardPROD工件怎么可能是快照?PROD工件通常是已发布的工件,即具有固定版本(非快照)的工件。我不明白你的问题。你是对的,所以我将重新表述:从快照中,我需要生成特定的工件,并使用编码的env和固定版本(基于maven.build.timestamp)以这种格式(例如:01.01.09.32.Tue-1730-dev.zip使用这种时间格式:yy.ww.EE HHmm)。自构建(开发/测试)将几乎每天从快照生成,我只是在寻找生成它们的良好实践(配置文件、不同的项目/CI构建)…etcSo您建议为每个环境都有其他单独的项目吗?您能提供一个例子吗?是的。每个输出都需要单独的模块。或者,您可以将它们压缩到一个包中,让安装程序提取必要的文件夹。我也喜欢这样做,尽管它有点麻烦。最好有一个可以在任何环境下工作的二进制文件,并从一个升级到下一个(例如DEV->TEST->PROD)。我们还在各自独立的项目中对配置文件进行版本设置,以便对其进行控制,但这会导致maven项目激增……如果有人提出更好的方案,我们会感兴趣。下面是一个生成特定于环境的配置的示例项目:我们几乎每天都为开发和测试生成构建,since for PROD将只计算完整版本…因此将获得大量“快照”