通过jenkins自动部署war包到tomcat时遇到的一些问题

Posted 残虹急雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过jenkins自动部署war包到tomcat时遇到的一些问题相关的知识,希望对你有一定的参考价值。

前两天项目组长让我通过jenkins的持续集成来完成项目的自动部署,但是中间可是踩了不少坑,在这里记录一下遇到的问题和解决办法。

服务器环境 windows server 2008 R2

项目容器版本 tomcat 7.0.82

jdk版本 jdk7.0.72

重现步骤

1.jenkins安装插件,在插件管理器中找到如下插件安装

2.因为jenkins实现这个插件的功能,原理也是上传文件至tomcat的wabapps文件夹,但是要对上传做一个安全控制,否则任何人都可以上传那不是乱套了。所以我们需要在tomcat中声明一个用户和密码,然后jenkins使用这个用户身份去上传就OK了。具体步骤如下

    2.1  在tomcat/conf/tomcat-user.xml中创建用户名和密码

<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/> 
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat@deployer" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>

注:那几个rolename最好都写上,有帮助,比如gui和script表示该用户拥有执行script和使用gui界面的权力。

      username和password自己定义一个即可。

    2.2   在jenkins中新建认证身份,用于连接tomcat。

   注:scope为该身份的作用域,设为全局即可,username和password对应刚才在tomcat内创建的用户,ID为自动生成以及对这个身份的简单描述。

 

3. 构建(本项目为grails项目,如下shell代码仅供参考)

  

此处执行shell构建的操作:    source /etc/profile:主要目的 重新导入环境变量   rm -f target/*.war:清除之前已构建的包  grails prod war:再打个包(默认还在target目录下)

 

4. 然后可以配置自动部署啦,在"构建后操作"这一步会多一个选项,即刚才安装的插件支持的功能,部署一个war/ear包到服务器容器里。

 

     注:war/ear files 即构建的包的路径,相对于项目的根路径。

            context path 可以理解为部署在tomcat之后,项目的访问路径。 此处的 / 表示为webapps文件夹的ROOT目录,在我的这种情况下,无论项目名是什么,均通过192.168.1.28:8080访问.

            containers  这个就简单了 添加你的tomcat版本(或其他,如jboss),认证身份就用刚才创建的那个全局身份,tomcat URL 就写到tomcat的端口地址就可以啦。

5. 打完收工,保存,build now!

 

如果你是个幸运儿,构建之后的控制台输出为 success, 那配置到这里就应该结束了,但是我这个出现了N多次failure,在这里简单贴出可能的解决办法:

1.jdk版本保持一致。在你的开发环境(IDE)下的jdk版本,与服务器端的tomcat需要的jdk版本保持一致。不一致有可能出现兼容问题。

2.查看控制台的错误信息,如果服务器端tomcat返回的失败信息涉及到fileupload相关错误,一般情况下为项目体积过大导致,超过了tomcat默认的50M上限,需修改。

    打开Tomcat\\webapps\\manager\\WEB-INF\\web.xml,修改如下代码

<multipart-config>
<!-- 此处定义为大概200M -->
<max-file-size>200428800</max-file-size> <max-request-size>200428800</max-request-size> <file-size-threshold>0</file-size-threshold>
</multipart-config>

3.查看控制台的错误信息,如果项目构建过慢,最后以失败结束。很有可能是服务器内存过小,我的项目windows服务器起始为2G,相对于java/groovy这种吃内存的语言来说太小了。后来加到了4G才勉强可以。

 

 

            

以上是关于通过jenkins自动部署war包到tomcat时遇到的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

jenkins部署war包到远程服务器的tomcat

用Maven部署war包到远程Tomcat服务器

持续集成之Jenkins自动部署war包到远程服务器

部署Web项目的War包到TomCat服务器

性能测试四十八:Jenkins+Ant+Jmeter系统部署

Linux环境部署war包到tomcat