您的位置:首页 > 运维架构 > Tomcat

CI学习一:maven项目自动部署到tomcat

2016-01-07 00:00 836 查看
铺垫:

在原来公司,技术总监是一个非常有能力的人,可以说是搞技术的人的一个风向标、一个标杆。他在公司内部搭建了一套持续集成(Continuous integration,简称CI,原理的话,网上很多,不再累述)的架子,使用的jinkens+maven/ant,还在jinkens上集成了一些其他的插件,如sonar等。

技术总监对代码质量要求非常高,当然,这也是把一个产品做好的必要一步。

实际上,在他的这一套东西下,公司的项目一天天变好,代码质量越来越高,体系更健全,流程更清晰,开发人员的自觉性和编码能力都有所提高。

现在从原来公司出来了,仔细想想,还没有自己掌握这一套东西。好的东西,就应该被传承下去,所以最近开始自己学习CI一套的东西。

说明:

我自己学习东西的时候,自制力不强,所以一般没有很体系地去学习,文章可能也写得没什么条理(典型的理科生,想到什么说什么),所以在文章结构上希望大家体谅下。

废话不多了,开工:

首先搭建一个简单的CI基础:一个maven项目,自动部署到tomcat

我在做这个DEMO的时候,其实已经集成到了jinkens上,但是一直在自动部署的这一块出问题,后来我就单独用命令在验证了,所以和jinkens继承的内容放到后面(可能下一章)来讲。之所以单独一章来讲自动部署这一块,是由于我发现网上很多的文章都说得非常含糊(主要参考StackOverflow),好了,废话不多说了。

准备材料:

1、maven project(不详细讲解如何建立project,请参考我的其他博客)

2、tomcat(6或者7都可以,有一点小差别,后面讲到)

3、maven3.0.5

开发环境:jdk7+tomcat7+windows7 x64 +eclipse

第一步:配置tomcat

无论你是tomcat7或者tomcat6,修改%TOMCAT_HOME%/conf/tomcat-users.xml,在里面添加用户。

高能警告:下面的<role></role>标签,在tomcat的原来默认配置里面,只有<role rolename="tomcat" />和<role rolename="role1" />,如果只使用这两种配置的话,是无法再http://localhost:8080/manager下登录的,会出现403错误(由于没有manager-gui角色权限),如果没有配置<role rolename="manager-script" />[b]<role rolename="manager-jmx" />,并且在roles里面添加进去[/b],会在自动部署的时候,出现Cannot invoke Tomcat manager: Connection reset by peer错误(这个问题我搞了一天,在StackOverflow上很多类似的问题,但是都没提别提醒是这个地方出的问题)

<role rolename="tomcat" />
<role rolename="role1" />
<!-- tomcat的默认注释掉的代码里面没有下面四中角色,一定要加上,不然会出现很多错误 -->
<role rolename="admin" />
<role rolename="manager-gui" />
<role rolename="manager-script" />
<role rolename="manager-jmx" />

<user username="admin" password="admin" roles="tomcat,manager-gui" />
<user username="both" password="tomcat" roles="tomcat,role1,manager-gui" />
<!-- 这个是我用到的用户,roles里面的角色名很重要 -->
<user username="tomcat" password="tomcat" roles="role1,manager-gui,tomcat,admin,manager-script,manager-jmx" />


第二步:配置maven的settings.xml文件

我的settings.xml在%MAVEN_HOME%/conf下,在<servers>节点内,添加如下代码

<server>
<id>tomcatServer</id>
<!-- server login name -->
<username>tomcat</username>
<!-- server login password -->
<password>tomcat</password>
</server>


第三步:配置pom.xml

在<plugins>节点内,添加如下代码,

高能警告:tomcat7-maven-plugin插件里的<url>里是http://localhost:8080/manager/text,不是http://localhost:8080/manager/html,

<build>
<finalName>myweb</finalName>
<defaultGoal>install</defaultGoal>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<!-- 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
<version>3.0</version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>true</skipTests>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>

<!-- 自动部署到tomcat -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<!-- tomcat7 -->
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>

<!-- 如果是tomcat6,则使用tomcat-maven-plugin  1.1版本
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
-->
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>tomcatServer</server>
<path>/myweb</path>
</configuration>
</plugin>
</plugins>
</build>


第四步:运行maven命令,自动编译-打包-部署

首先启动tomcat。

使用CMD命令,进入项目的根目录,然后运行命令:mvn -U clean package tomcat7:deploy(如果是tomcat的插件,那么使用mvn -U clean package tomcat:deploy命令),如果是重新部署,则把deploy改成redeploy。



最后看到BUILD SUCCESS则表示部署成功了



在%TOMCAT_HOME%/webapps下,能够看到我们部署的系统



补充:

这也是我刚才实验发现的,当使用CMD命令运行了maven命令自动部署后,惊奇地发现,没有重启tomcat,新部署的myweb项目也启动了,并且可以访问。下图是运行命令时,tomcat的日志

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息