最近领导要求上海本地的项目须要使用进jenkins实现自动化部署,以即可以直接将项目移交给运维的同窗,减轻开发的工做量。记录下此次爬坑的过程。html
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工做,功能包括:一、持续的软件版本发布/测试项目。二、监控外部调用执行的工做。
采用1.2的的方式下载war包的话,其实有两种启动方式。java
第一种,放到tomcat容器,web
第二种,cmd进入安装目录,java -jar jenkins.warspring
安装方式1.1和1.2 的流程是同样的apache
jenkins默认8080端口,能够修改,方法百度。windows
进入http://localhost:8080/。红色字体路径有密码,将密码填上,而后下一步。后端
选择插件,建议选择官方建议插件,避免不少麻烦。缓存
等待安装中ing......tomcat
安装好后看到下图,用户名密码登录用的,全名是用来显示的。继续下一步。服务器
由于我要部署的是maven项目,jenkins默认的插件中是没有maven的,首先须要安装下。
点击下图插件直接安装就好了,maven integration plugins
安装热部署插件Deploy to container Plugin
咱们须要配下maven的setting文件,jdk以及maven地址,setting文件必定要配,不要用它默认的,撸主由于这个没配,出问题纠结很久。
最后Apply而后Save就好了,记得别忘了应用保存,否则白配了。
接着咱们来新建一个项目,先输入项目名,选择maven项目,OK
选择源码管理,由于咱们是企业项目,不是开源,使用的SVN,选择Subversion配置SVN
URL是你SVN地址,Credentials是帐户密码
而后到Pre Steps,这个东西是打包前须要什么操做,好比咱们如今的项目须要拷贝log4j.xml文件等等,根据环境能够写windows或者Shell脚本
没有操做的话,就不用配了。
贴出个人脚本给你们参考,相关部分我用XXX替代
@echo off
rem 设置变量
:: APP.XXX app.XXX代码的本地跟目录
set APP.XXX="D:\svn\svn.173.X.X.X\app.XXX\"
::home.omm的log4j.xml 变量START
:: HOME_OMM_LOG4J_GOALS_PATH 存放home.omm的log4j.xml的路径
set HOME_OMM_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\home.omm\src\main\resources"
::HOME_OMM_LOG4J home.omm的log4j.xml测试环境的路径
set HOME_OMM_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\home.omm\sh_test\resources"
::home.omm的log4j.xml 变量END
::home.weixin的变量START
:: HOME_WEIXIN_LOG4J_GOALS_PATH 存放home.weixin的log4j.xml的路径
set HOME_WEIXIN_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\home.weixin\src\main\resources"
::HOME_WEIXIN_LOG4J home.weixin的log4j.xml测试环境的路径
set HOME_WEIXIN_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\home.weixin\sh_test\resources"
:: HOME_WEIXIN_CONFIG.JS_GOALS_PATH 存放home.weixin的config.js的路径
set HOME_WEIXIN_CONFIG.JS_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\home.weixin\src\main\webapp\module\js"
::HOME_WEIXIN_CONFIG.JS home.omm的log4j.xml测试环境的路径
set HOME_WEIXIN_CONFIG.JS="D:\svn\svn.173.X.X.X\app.XXX\config\home.weixin\sh_test\webapp\module\js"
::home.weixin的变量END
::service的变量START
:: SERVICE_LOG4J_GOALS_PATH 存放service的log4j.xml的路径
set SERVICE_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service\src\main\resources"
::SERVICE_LOG4J service的log4j.xml测试环境的路径
set SERVICE_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\service\sh_test\resources"
:: SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH 存放application-resources-all.xml的路径
set SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service\src\main\resources\config\spring"
:: SERVICE_APPLICATION_RESOURCES_ALL application-resources-all.xml测试环境的路径
set SERVICE_APPLICATION_RESOURCES_ALL="D:\svn\svn.173.X.X.X\app.XXX\config\service\sh_test\resources\config\spring"
::service的变量END
::service.refresh的变量START
:: SERVICE_REFRESH_LOG4J_GOALS_PATH 存放service.refresh的log4j.xml的路径
set SERVICE_REFRESH_LOG4J_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service.refresh\src\main\resources"
::SERVICE_REFRESH_LOG4J service的log4j.xml测试环境的路径
set SERVICE_REFRESH_LOG4J="D:\svn\svn.173.X.X.X\app.XXX\config\service.refresh\sh_test\resources"
:: SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH 存放application-resources-all.xml的路径
set SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH="D:\svn\svn.173.X.X.X\app.XXX\src\service.refresh\src\main\resources\config\spring"
:: SERVICE_REFRESH_APPLICATION_RESOURCES_ALL application-resources-all.xml测试环境的路径
set SERVICE_REFRESH_APPLICATION_RESOURCES_ALL="D:\svn\svn.173.X.X.X\app.XXX\config\service.refresh\sh_test\resources\config\spring"
::service.refresh的变量END
::判断home.omm的log4j.xml文件是否存在
if exist %HOME_OMM_LOG4J_GOALS_PATH%\log4j.xml (del %HOME_OMM_LOG4J_GOALS_PATH%\log4j.xml)
cd %HOME_OMM_LOG4J_GOALS_PATH%
copy %HOME_OMM_LOG4J%\log4j.xml log4j.xml
::判断home.weixin的log4j.xml文件是否存在
if exist %HOME_WEIXIN_LOG4J_GOALS_PATH%\log4j.xml (del %HOME_WEIXIN_LOG4J_GOALS_PATH%\log4j.xml)
cd %HOME_WEIXIN_LOG4J_GOALS_PATH%
copy %HOME_WEIXIN_LOG4J%\log4j.xml log4j.xml
::判断home.weixin的config.js文件是否存在
if exist %HOME_WEIXIN_CONFIG.JS_GOALS_PATH%\config.js (del %HOME_WEIXIN_CONFIG.JS_GOALS_PATH%\config.js)
cd %HOME_WEIXIN_CONFIG.JS_GOALS_PATH%
copy %HOME_WEIXIN_CONFIG.JS%\config.js config.js
::判断service的log4j.xml文件是否存在
if exist %SERVICE_LOG4J_GOALS_PATH%\log4j.xml (del %SERVICE_LOG4J_GOALS_PATH%\log4j.xml)
cd %SERVICE_LOG4J_GOALS_PATH%
copy %SERVICE_LOG4J%\log4j.xml log4j.xml
::判断service的application-resources-all.xml文件是否存在
if exist %SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml (del %SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml)
cd %SERVICE_APPLICATION_RESOURCES_ALL_GOALS_PATH%
copy %SERVICE_APPLICATION_RESOURCES_ALL%\application-resources-all.xml application-resources-all.xml
::判断service.refresh的log4j.xml文件是否存在
if exist %SERVICE_REFRESH_LOG4J_GOALS_PATH%\log4j.xml (del %SERVICE_REFRESH_LOG4J_GOALS_PATH%\log4j.xml)
cd %SERVICE_REFRESH_LOG4J_GOALS_PATH%
copy %SERVICE_REFRESH_LOG4J%\log4j.xml log4j.xml
::判断service.refresh的application-resources-all.xml文件是否存在
if exist %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml (del %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH%\application-resources-all.xml)
cd %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL_GOALS_PATH%
copy %SERVICE_REFRESH_APPLICATION_RESOURCES_ALL%\application-resources-all.xml application-resources-all.xml
exit
Build编译了,指定pom位置,以及mvn命令,对了高级里面还能够配置workspace,不配默认在jenkins安装目录中
构建后操做,就是包打好了放在哪。选择下图
本次构建后操做,使用的是tomcat的热部署,热部署能够参考我以前的文章:Tomcat7的热部署
WAR/EAR:war包的地址
Context:是部署后的包名
UserName/Password是指热部署tomcat的帐号/密码
URL:tomcat的界面,如:http://172.16.101.71:8180/
讲了那么多,终于到了最后了,一个按钮的操做终于到了,返回jenkins首页就能够看到咱们的项目了。
构建后点击左下角构建执行状态中能够看到咱们的项目在构建中。点击项目名进入
选择Console就能看到咱们构建过程当中打印出来的日志或者错误信息了。
jenkins角色问题,既然是发布就涉及到生产环境,不能全部用户都有部署生产环境的权限吧,若是谁不当心点了下。那后果.....不敢相信。
解决:安装Role-based Authorization Strategy插件,其他步骤参考:http://www.cnblogs.com/zz0412/p/jenkins_jj_14.html 不在详述。
tomcat热部署的问题, deploy几回以后出现内存上涨溢出,中止运行或者报错的问题,网上查了下是热部署自己的问题,正在寻求解决办法ing.....。
解决:tomcat热部署自己存在问题,生产环境通常不会采用热部署的方式。目前我这边测试环境由于使用的是windows server 2008系统,因此采用的是热部署的方式,问题依旧存在,可是我看过一个帖子是说可使用Windows 批处理命令的方式解决,就是bat命令,不过我还未深刻研究过。生产环境Linux系统,目前我使用Publish Over SSH 插件,具体步骤是配置中加入下图步骤。
一、在系统管理-》系统设置里找到Publish over SSH 而后输入:
二、配置Post Steps
这里仍是接着上面的项目,这个配置得安装了上面的插件后才会显示!
如图,会将war包放到home/admin文件夹,接着我会执行我写的Shell命令。主要涉及,中止tomcat,备份原war包,删除webapp下原war包,将home/admin下的新war包拷进来,启动tomcat,而后就完成了。这样就避免了热部署内存溢出致使服务器崩溃的问题了。
脚本参考:
#!/bin/sh #defined TOMCAT_HOME="/usr/java/tomcat/apache-tomcat-7.0.67/" ID=`ps -ef | grep java | grep tomcat|awk '{print $2}'` echo $ID echo "kill tomcat" kill -9 $ID echo "remover war file" cd "$TOMCAT_HOME"/webapps rm -rf JavaWeb-0.0.1-SNAPSHOT rm -rf JavaWeb-0.0.1-SNAPSHOT.war echo "copy war to webapp" cd /home/lin cp JavaWeb-0.0.1-SNAPSHOT.war "$TOMCAT_HOME"/webapps cd "$TOMCAT_HOME"/bin echo "start tomcat" ./startup.sh
Deploy插件问题,上文中使用的Deploy to container Plugin插件来实现热部署,可是deploy插件限制一个工程只能部署一个war包,个人项目是,一个工程先后端分离的两个war,总不能新建两个项目构建两次吧, ̄へ ̄。
解决:热部署尽可能不要使用,测试环境暂时使用的话,我目前是,新建两个工程,每次只编译一个war包。