我有一个项目需要部署到多个环境中( prod,test,dev )。主要区别主要在于配置属性/文件。
我的想法是使用配置文件和覆盖来复制/配置专用输出。但是如果我必须使用专门的分类器生成多个工件(例如:“my-app-1.0-prod.zip/jar”,“my-app-1.0-dev.zip/jar”)或者我应该为每个环境创建多个项目,一个项目?!
我应该使用maven-assembly-plugin为每个环境生成多个工件吗?
无论如何,我需要立刻生成所有它们,因此它会使轮廓不适合...仍然困惑:(
任何提示/示例/链接都将受到欢迎。
作为一个侧面问题,我也想知道如何在CI Hudson / Bamboo中实现这一点,以便为所有环境生成和部署这些生成的工件,并将其部署到适当的服务器上(例如:使用SCP Hudson插件)?
答案 0 :(得分:10)
我更喜欢将配置文件与应用程序分开打包。这允许您运行EXACT相同的应用程序并在运行时提供配置。它还允许您在事实之后为您在构建时不需要的环境生成配置文件。例如CERT 我使用“汇编”工具将每个域的配置文件压缩成命名文件。
答案 1 :(得分:2)
我会使用version
元素(如1.0-SNAPSHOT,1.0-UAT,1.0-PROD),因此在VCS级别结合配置文件标记/分支(用于特定环境的事物,如机器名称,用户)命名密码等),以构建各种工件。
答案 2 :(得分:1)
我们使用以下方法实现了一个m2插件来构建最终的.properties:
答案 3 :(得分:0)
我们使用配置文件来实现这一目标,但我们只有默认配置文件 - 我们称之为“开发”配置文件,并且上面有配置文件,我们有一个“发布”配置文件,其中我们不包含配置文件(因此可以在安装应用程序时正确配置它们。)
我会使用配置文件来执行此操作,如果需要部署配置文件,我会将配置文件附加到工件名称中。我认为它与Pascal建议的有些相似,只是你将使用配置文件而不是版本。
PS:我们只有开发/发布配置文件的另一个原因是,每当我们发送UAT或PROD的东西时,它都已被释放,所以如果有错误,我们可以追踪代码的状态是什么时候应用程序已发布 - 在SVN中标记它比在提交历史记录中查找状态更容易。答案 4 :(得分:0)
我去年夏天有这种情况。
我最终使用分类器为每个更高的环境使用配置文件。默认配置文件是“不伤害”开发构建。我有一个DEV,INT,UAT,QA和PROD配置文件。
我最终在Hudson中定义了多个作业,以生成区域特定的工件。
我不同的一件事就是以不同的方式构建项目,以便区域特定的构建不在模块化的主项目中。那就是它只是为每个特定的构建提取最新的工件,而不是为每个区域重建整个项目。
事实上,当我设置作业时,QA和PROD作业总是设置为构建标记。显然,您可以根据部署的特定工作场所规则进行定制。
答案 5 :(得分:0)
尝试使用https://github.com/khmarbaise/multienv-maven-plugin为每个环境创建一个主WAR和一个配置JAR。