前两天项目组长让我通过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中创建用户名和密码
注:那几个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,修改如下代码
200428800 200428800 0
3.查看控制台的错误信息,如果项目构建过慢,最后以失败结束。很有可能是服务器内存过小,我的项目windows服务器起始为2G,相对于java/groovy这种吃内存的语言来说太小了。后来加到了4G才勉强可以。