创建 webapp 战争发布“行家之道”
Posted
技术标签:
【中文标题】创建 webapp 战争发布“行家之道”【英文标题】:Create webapp war releases 'the maven way' 【发布时间】:2011-05-17 09:35:36 【问题描述】:我的 webapp 主要包含两个工件,java-server.jar 和 js-client.war。两者都是聚合/叠加的,并为目标环境获取额外的属性文件。最后,我得到了战争文件。
一些战争文件是使用 tomcat 部署的:通过脚本部署一些文件,但此时这无关紧要。
我不喜欢我的方法有几件事:
服务器和客户端使用 maven-release-plugin 发布,最终的 webapp 不是。 仅通过最终的战争文件,我无法确定它是为哪个服务器构建的。 我通常需要同时使用多个客户端/服务器组合:当我使用稳定版本构建 beta 服务器时,每晚构建服务器应在最新快照上运行。您如何维护、发布和部署(到 maven 存储库)稳定/测试版 web 应用程序?您如何维护目标服务器特定的配置设置?你如何保持不同的版本?分店多吗?
谢谢,杨
【问题讨论】:
两个项目是否有共同的父 POM 项目? 【参考方案1】:我正在做的是使用 Jenkins 额外的 maven 构建步骤来执行
tomcat:deploy
在每次构建之后。使用正确的 Maven 配置文件,将构建指向我们的开发服务器。然后,当我们想要推送到 staging 时,我们使用 maven 发布插件(再次使用 Jenkins)来创建版本号不是快照的发布。假设我们然后发布 2.0beta3 来暂存。这是通过以下方式完成的:
tomcat:deploy -P staging-deploy
然后,配置文件确保我们推送到登台服务器而不是开发服务器,并使用如下 pom 条目:
<profile>
<id>deploy-staging</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>tomcat-staging</server>
<url>http://tomcat-staging.internal:$tomcat-staging.port/manager/text</url>
<path>$tomcat.path</path>
</configuration>
</plugin>
</plugins>
</build>
</profile>
最后,从 staging 到 live 完全在 maven 和 jenkins 之外完成。我只是不相信 maven 不会崩溃 :-)
【讨论】:
【参考方案2】:我可以推荐使用像hudson 这样的构建服务器。它有 maven 和 rcs 支持。 例如,您可以指定要构建源代码的哪个分支以及要执行的 Maven 目标。
我们还使用 hudson 将构建部署到我们的 Web 服务器。
【讨论】:
我的问题不是如何开始构建,而是如何配置 maven 和 subversion 以针对不同的目标平台进行构建。【参考方案3】:我的情况没有你那么复杂,所以我只能回答这个问题:
您如何维护目标服务器特定的配置设置?
我尝试将所有配置外部化,以便将完全相同的 WAR 文件部署到 stage/prod。为此,我使用 Spring 的 context:property-placeholder 标记。 WAR 中有“默认”属性文件,它们被 /etc/app/*.properties 中的属性覆盖(在 Windows 上为 c:/etc/app/*.properties)。
至于实际部署,我目前手动上传 WAR 文件,但计划在不久的将来自动完成。
【讨论】:
也是一种可能的解决方案。但是 svn 中的配置文件与目标系统上的配置文件...我不知道哪个更好。 我在 WAR 中放置了合理的默认值,并允许它们在目标系统上被覆盖。这也允许我更改属性并重新启动应用程序服务器,而无需构建/部署应用程序。我发现这对我的经验来说是一个巨大的好处,但我敢肯定有人会反驳对方。以上是关于创建 webapp 战争发布“行家之道”的主要内容,如果未能解决你的问题,请参考以下文章
使用 EB CLI 3.4.5 (Python 2.7.6) 发布 ElasticBeanStalk/Tomcat 战争部署