sha*_*unc 20 deployment tomcat maven
我必须承认,在多年生活在极好的debuild/ant/makefile嵌合构造的世界中,我对maven世界不熟悉.我只是没有那种帮助经验丰富的开发人员选择正确决定的感觉,而且看起来maven有很多不同的方式.
所以,我有一个包含web-app的简单项目.我基本上想要跟随:
为了区分开发和生产,我创建了配置文件,dev以及prod.该dev配置文件默认激活.当我想将某些东西部署到生产中时,我只需输入mvn -P prod tomcat:deploy
我已经阅读了关于发布插件以及buildnumber插件的内容.但我只是不确定我是否正确行事.
所以,问题是 - 解决我正在询问的任务的最简单,自足和"少年"方式是什么.
Jea*_*evy 22
Shabunk,正如我所评论的那样,Maven正在推动你做最好的方式来做你想做的事情,继承了多年的开发经验.
我会解释我会做什么(以及我自己真正做过的).
所以你正确使用Maven Release Plugin,再加上另一个(例如货物)你正试图做两件不同的事情:
Maven Release插件
考虑一下你自己的流程可能比其他开发团队习惯的更轻松.我的意思是大型团队的单元测试和生产部署之间有更多的步骤(问答,用户接受,非回归支持).您似乎可以创建一个链接标记和生产部署的快捷方式.如果您想在不同的环境(集成,用户接受,性能,preprod等)上部署您的webapp,您必须识别您的版本并且必须能够再次构建它(确定并且"可重复").
maven-release-plugin的目的是什么.它可以帮助您验证源代码是否干净(源代码管理下的所有文件,无需修改),可以编译并通过所有测试阶段.然后,它处理pom版本和标记,并通过存储它以供以后在Maven企业存储库中使用来完成.
您有许多配置要设置(ditributionManagement,SCM,maven插件发布配置).但是一旦它到位,在一个简单的命令行中释放版本:
mvn release:prepare release:perform
Run Code Online (Sandbox Code Playgroud)
如果你想要一些例子,我可以给你一些.
<scm>
<!-- Base URL repository -->
<url>scm:svn:http://svn.myorg.corp/svn/repository/</url>
<!-- Developper URL (from trunk or branche) -->
<developerConnection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</developerConnection>
<connection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</connection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.6</version>
<configuration>
<username>${from.settings.xml.user}</username>
<password>${from.settings.xml.password}</password>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<tagBase>http://svn.myorg.corp/svn/repository/tags/</tagBase>
<scmCommentPrefix>[DEV#SCM]</scmCommentPrefix>
</configuration>
</plugin>
</plugins>
[...]
</build>
<distributionManagement>
<repository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - Stable versions</name> <url>http://repo.corp:8080/artifactory/prj-xxx-releases</url>
</repository>
<snapshotRepository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - DEV versions</name>
<url>http://repo.corp:8080/artifactory/prj-xxx-snapshots</url>
</snapshotRepository>
<site>
<id>corporate_site</id>
<name>Corporate public site</name>
<!-- must add wagon plugin that support this protocol -->
<url>ftp://...</url>
</site>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
Deployement
再一次,您可能需要多个环境来测试您的应用程序.有许多插件可以让你发送和部署你的战争:一般货物插件,或更具体的tomcat-plugin,glassfish-plugin,...插件让你无法做你想做的事.然后,可以以多种方式执行配置.
Full Maven方式:Maven 的完全集成方式是使用Profile和Filters.正如您所知,简档描述了适当性和行为.过滤器是一种.properties,它将一组变量分组,用于将xml配置文件中的模式替换为war(例如,db connection).它不是我使用的那个,因为我发现它不如外化文件灵活.但是不要紧
Maven及其生态系统: 我更喜欢的方式是使用Maven和Jenkins(或Continous Integration工具)构建我的应用程序.这就是为什么我同意Aaron说他必须克服你的工具的局限性.使用Jenkins,我每小时/每天运行我的应用程序对抗单元测试,生成问答报告,文档,......我有一个发布版本,可以帮助我生成我想要的所有内容(给我的测试团队或我的客户),我为我的工作提供了一些信息,以便将其部署到不同的环境中(使用maven配置文件或jenkins内置配置).
它对我来说真的很好,我很确定这是正确的方法.
[编辑]
部署
再一次,部署意味着生命周期的不同阶段.
本地/开发环境
我永远不会使用tomcat:部署到现在,但仅仅因为我更喜欢使用jetty作为轻型Web容器(并且与maven集成).但我很确定每个配置都适合您的需求.
持续集成环境 在持续集成环境中,我通常直接使用Jenkins复制战争(在所需的机器上导出*.war).我的方式取决于很多事情:
大多数时候,这是一个简单的副本.如果我不能,我会使用一些集成的maven插件(比如jahia:为着名的CMS部署插件:www.jahia.com),或者只是货物插件:http://cargo.codehaus.org/Maven2+plugin .我没有任何例子,但在互联网上找到一些很容易,因为这种配置经常被推荐.
问答/验收/生产环境
对于那些经常(就我在工作中看到的那样)处理服务水平协议的环境,我们(我或管理团队)编写了一些特定的脚本.我相信你会变得沮丧,但正如我所提到的,我并不依赖于Maven的一切,尤其是部署.恕我直言,这是这个工具的一个限制.您可以依赖货物插件或特定货物插件,但是发布版本或构建版本与实际部署不匹配(按时间顺序).更重要的是,我没有找到任何允许我轻松部署在多个实例上的插件......甚至值得你不得不按特定顺序关闭实例(SLA的需求).也就是说,我没有提到外部属性,SQL脚本或其他任何东西.它们是依赖专用工具的其他原因.
所以,通常,我们编写了自己的ant/sell脚本.如果其他人有更好的解决方案,我显然对此感兴趣!
我希望我很清楚.
问候.
| 归档时间: |
|
| 查看次数: |
13844 次 |
| 最近记录: |