首先,这个资源在网上有很多,讲的也很全,今天写这篇文章主要是记录今天在部署时候遇到的细节问题,希望能对大家有帮助。
先说下自动编译的好处,因为每次开发改动到的东西都要打包到服务器,如果不做自动部署,则需要每次手动打包再上传到服务器,这样会多了很多不必要的麻烦。
使用maven+tomcat是自动编译部署的一种方式,这种方式是基于项目的,需要在项目文件做配置。那有的人就会说,每次都在项目配置,也稍麻烦,的确,这种方式仅限于单体应用,如果是分布式则要配置的就相对繁琐,那么还有其他的方式吗?当然,在大公司有专门的运维平台,会使用一些工具如jenkins对版本控制的代码进行打包上传到服务器,下面我说一下两者的区别。
假设现在使用的是maven+tomcat是自动编译部署,那么部署的方式则是通过maven命令执行命令进行操作,每次部署的话会先从git pull,然后再执行maven命令把生成的war包自动部署到服务器。那使用Jenkins呢?
Jenkins则是在上面的基础上做提升,可以使用maven+git、svn+tomcat进行操作,大概流程是开发者把code上传到git、svn,使用Jenkins帮你进行上面的maven命令操作,可以设置Jenkins每分钟进行轮询,如果开发者有上传代码,则自动进行打包,这样是不是节省了我们手动打包,手动部署的操作步骤呢?好了,对于jenkins,有需要的朋友可以去学习了解,这边不做更多的累赘。现在先说下maven+tomcat是自动编译部署操作步骤和我今天遇到的问题吧!
非常简单,按照以下步骤走就可以。
一:在maven项目添加插件
<bulid>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://127.0.0.1:8080/manager/text</url> <!--这边以本地路径为例,如果是远程服务器则该对应的ip即可-->
<server>tomcat-maven</server>
<path>/shop</path>
<charset>utf8</charset>
<update>true</update>
</configuration>
</plugin>
</build>
备注:
1:以上的插件不是唯一的,还有别的插件可以进行操作,如果是第一次使用,可以先使用上面的版本
2:url:要打包上传的远程服务器。格式:tomcat6不需要/text,tomat7,8都需要
configuration参数是干嘛的呢?
1:server名称是待会需要在本地maven配置的,这两个名称需要一致
2:path就是你生成的访问路径,如果是上面写的,则访问路径是这样的http://127.0.0.1:8080/shop就可以访问了
二:在本地maven配置文件设置要的tomcat管理员权限
在setting.xml添加参数
<servers>
<server>
<id>tomcat-maven</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
备注:上面的id就是在pom设置的server名称,两个需要一致
这边的username和password是tomcat的,需要我们设置tomcat权限
三:在tomcat-users.xml设置
把以下参数放到<tomcat-user>体
<role rolename="tomcat"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script" />
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="tomcat,manager,manager-script,admin-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />
这边配置的admin以及操作权限。
以上是我操作的步骤,网上有一些说还需要配置tomcat的访问ip,大家可以参考下
将 /apache-tomcat-8.5.4/webapps/manager/META-INF/context.xml中的,ip限制去掉
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
好了,接下来准备执行命令进行测试
如果是idea开发工具可以这样做,在右上角tomcat配置的地方打开,edit configuration,+选择maven
working-directory选择项目路径即可
commad-line:
//第一次
tomcat7:deploy
//之后
tomcat7:redeploy
mvn package -Pdevelop -Dmaven.skip.test=true tomcat7:deploy
-Dmaven.skip.test=true:是跳过测试的意思
注:开始执行命令时候tomcat是需要打开的,不然会报错。
总结:一开始是在本地做测试,很快就成功并且能够访问。后来要部署到服务器的时候就可以种报错。
首先,服务器的tomcat一样需要上面的操作。我这边报错的有
这样的
Cannot invoke Tomcat manager: Connection reset by peer: socket write error -
网上也是各种找,但是都不行。
后来找到了,首先服务器的tomcat是别人搭建的,tomcat的目录结构被修改,webapp下的manager文件夹和ROOT都不在了,所以出现了这种问题,后来把manager和ROOT加上去就可以了。希望对遇到问题的朋友有帮助。
如果您有兴趣,欢迎加入it成长之路学习交流群:728603969,群主会不定时的分享学习材料哦