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

原创
2016/01/07 10:21
阅读数 851

铺垫:

    在原来公司,技术总监是一个非常有能力的人,可以说是搞技术的人的一个风向标、一个标杆。他在公司内部搭建了一套持续集成(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" /><role rolename="manager-jmx" />,并且在roles里面添加进去,会在自动部署的时候,出现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的日志

展开阅读全文
打赏
0
15 收藏
分享
加载中
更多评论
打赏
0 评论
15 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部