jenkins+tomcat+ant+java+linux 自动部署项目

Posted 程序员技术前沿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins+tomcat+ant+java+linux 自动部署项目相关的知识,希望对你有一定的参考价值。

最终效果:

每1小时自动查下svn,如果svn有提交,则自动更新部署。

具体环节包括:更新代码、编译代码、打包代码、拷贝代码、备份旧war、删除缓存、停启tomcat。

使用环境:


java+tomcat+ant+jenkins+linux


1、准备jdk

http://www.oracle.com/technetwork/Java/javase/archive-139210.html

然后解压

tar  -zxvf   压缩文件名.tar.gz

编辑环境变量

vim /etc/profile

最后面添加以下配置

export JAVA_HOME=/usr/local/jdk1.7.0_80/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar

激活环境变量

source /etc/profile


2、准备ant

wget https://www.apache.org/dist/ant/binaries/apache-ant-1.9.7-bin.zip

unzip apache-ant-1.9.7-bin.zip


3、准备jenkins

wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

官网下载很慢,特放到网盘http://pan.baidu.com/s/1eSfS4SU,当前版本号是2.8

将jenkins放入tomcat并启动,然后访问并next next初始化

jenkins所在tomcat,和应用所在tomcat必须是两个独立的tomcat

(因为要通过jenkins启停web应用的tomcat,此时jenkins所在tomcat不能停)


4、准备项目build.xml,我放在了项目根目录

[html] view plain copy

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <project name="ecp" default="deploy" basedir=".">  

  3.     <!--   

  4.         Must set these args in jenkins!!!  

  5.         TOMCAT_HOME=/usr/local/apache/apache-tomcat-8.0.35  

  6.      -->  

  7.       

  8.     <property name="webapp.name" value="ROOT" />  

  9.     <property name="dist.dir" value="${basedir}/dist" />  

  10.     <property name="ant.dir" value="/root/.jenkins/plugins/ant/WEB-INF/lib" />  

  11.     <property name="webRoot.dir" value="${basedir}/ROOT" />  

  12.     <!-- <property name="src.dir" value="${basedir}/src" /> -->  

  13.     <property name="config.dir" value="${basedir}/config" />  

  14.     <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />  

  15.     <property name="build.dir" value="${basedir}/build" />  

  16.       

  17.     <!-- 使用eclipse jdt进行编译,而不使用JDK编译   

  18.     <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />   

  19.      -->  

  20.   

  21.     <!-- 初始化classpath -->  

  22.     <path id="project.classpath">  

  23.         <fileset dir="${lib.dir}">  

  24.             <include name="**/*.jar" />  

  25.         </fileset>  

  26.         <!-- 添加tomcat类路径 -->  

  27.         <fileset dir="${TOMCAT_HOME}/lib">  

  28.             <include name="*.jar" />  

  29.         </fileset>  

  30.         <!-- ant lib包  -->  

  31.         <fileset dir="${ant.dir}">  

  32.             <include name="**/*.jar" />  

  33.         </fileset>  

  34.     </path>  

  35.   

  36.     <!-- get the source compile classpath in a printable form -->  

  37.     <pathconvert pathsep="${line.separator}|   |-- " property="echo.path.compile" refid="project.classpath">  

  38.     </pathconvert>  

  39.       

  40.     <!-- show classpath jars -->  

  41.     <target name="print_classpath">  

  42.         <echo message="|-- compile classpath and basedir"/>  

  43.         <echo message="|   |"/>  

  44.         <echo message="|   |-- ${echo.path.compile}"/>  

  45.         <echo message="|   |-- ${basedir}"/>  

  46.     </target>  

  47.       

  48.     <tstamp prefix="my">  

  49.         <format property="day" pattern="yyyy-MM-dd"/>  

  50.         <format property="time" pattern="HH:mm:ss"/>  

  51.         <format property="dt" pattern="yyyy-MM-dd_HH-mm-ss"/>  

  52.     </tstamp>  

  53.       

  54.       

  55.     <target name="checks">  

  56.         <available file="${TOMCAT_HOME}/webapps/${webapp.name}.war"  property="found.war"/>  

  57.     </target>  

  58.       

  59.     <!-- 备份上次war包 -->  

  60.     <target name="backup" depends="checks" description="备份旧文件" if="found.war">  

  61.         <echo message="begin backup..." />  

  62.         <move file="${TOMCAT_HOME}/webapps/${webapp.name}.war"   

  63.             tofile="${TOMCAT_HOME}/webapps/${webapp.name}.war.${my.dt}"></move>  

  64.     </target>  

  65.       

  66.     <!-- 删除之前的目录结构 -->  

  67.     <target name="clear" depends="backup" description="清理旧文件">  

  68.         <echo message="begin clear..." />  

  69.         <delete dir="${build.dir}" />  

  70.         <delete dir="${dist.dir}" />  

  71.         <!-- <delete file="${TOMCAT_HOME}/webapps/${webapp.name}.war" /> -->  

  72.         <delete dir="${TOMCAT_HOME}/webapps/${webapp.name}" />  

  73.         <delete dir="${TOMCAT_HOME}/work/Catalina/localhost/" />  

  74.     </target>  

  75.   

  76.     <!-- 创建目录结构 -->  

  77.     <target name="init" depends="clear" description="创建初始化目录结构">  

  78.         <echo message="begin init..." />  

  79.         <mkdir dir="${build.dir}/classes" />  

  80.         <mkdir dir="${dist.dir}" />  

  81.     </target>  

  82.   

  83.     <!-- 编译java -->  

  84.     <target name="compile" depends="init" description="编译java文件">  

  85.         <echo message="begin compile..." />  

  86.         <javac destdir="${build.dir}/classes" includeantruntime="false" nowarn="on"   

  87.             source="1.7" target="1.7" deprecation="true" debug="true"   

  88.             encoding="UTF-8" classpathref="project.classpath" >  

  89.             <src path="config" />    

  90.             <src path="core" />    

  91.             <src path="crm" />    

  92.             <src path="em" />    

  93.             <src path="fa" />    

  94.             <src path="hr" />    

  95.             <src path="oa" />    

  96.             <src path="scm" />    

  97.             <src path="src" />    

  98.             <src path="sso" />    

  99.             <src path="test" />    

  100.             <src path="thirdParty" />    

  101.             <src path="wf" />    

  102.             <compilerarg line="-Xlint:unchecked" />  

  103.             <!-- <classpath refid="project.classpath" /> -->  

  104.         </javac>  

  105.         <copy todir="${build.dir}/classes">  

  106.             <fileset dir="${config.dir}">  

  107.                 <include name="**/*.xml" />  

  108.                 <include name="**/*.properties" />  

  109.                 <include name="**/i18n/*.properties" />  

  110.             </fileset>  

  111.         </copy>  

  112.         <echo message="end compile..." />  

  113.     </target>  

  114.   

  115.     <!-- 将class文件打成 jar包 -->  

  116.     <!--    

  117.         <target name="pack" depends="compile">   

  118.             <jar jarfile="${build.dir}/${webapp.name}.jar">   

  119.                 <fileset dir="${build.dir}/classes">   

  120.                     <include name="**/*.class"/>   

  121.                 </fileset>   

  122.             </jar>   

  123.         </target>   

  124.     -->  

  125.   

  126.     <!-- 打成war包, 名称默认为 项目名 -->  

  127.     <target name="war" depends="compile" description="将工程打成war包">  

  128.         <echo message="begin war...${webRoot.dir}..." />  

  129.         <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}" webxml="${webRoot.dir}/WEB-INF/web.xml">  

  130.             <lib dir="${lib.dir}" />  

  131.             <classes dir="${build.dir}/classes" />  

  132.             <fileset dir="${webRoot.dir}">  

  133.                 <include name="***.*" />  

  134.             </fileset>  

  135.         </war>  

  136.         <echo message="end war..." />  

  137.     </target>  

  138.   

  139.     <!-- copy war包 tomcat的deploy目录 -->  

  140.     <target name="deploy" depends="war" description="部署项目">  

  141.         <echo message="begin deploy..." />  

  142.         <copy file="${dist.dir}/${webapp.name}.war" todir="${TOMCAT_HOME}/webapps" />  

  143.         <echo message="end deploy..." />  

  144.     </target>  

  145.       

  146. </project>  


5、jenkins所在虚拟机和应用所在虚拟机,不是同一虚拟机时(可选)


如上脚本,限于jenkins部署到本机的tomcat,(注意应用不要和jenkins共用tomcat)

如果需要部署到另一台虚拟机的tomcat,可以使用以下部署脚本

[html] view plain copy

  1. <!--把WAR包远程上传到tomcat -->  

  2. <target name="deploy" depends="war" description="部署项目">  

  3.     <!-- 删除服务器上的war包 -->  

  4.     <sshexec host="${tomcat.server}" username="${tomcat.user}" password="${tomcat.password}"  

  5.         trust="true" command="cd ${remote.dir}; rm -rf ${packagename}.war;cd ${tomcat.apps.dir}; rm -rf ${tomcat.apps.appname}" />  

  6.     <scp file="${result}/${packagename}-${version}/${packagename}.war" trust="true" username="${tomcat.user}"    

  7.       password="${tomcat.password}" todir="${tomcat.user}@${tomcat.server}:${remote.dir}" />  

  8. </target>  




6、配置jekins的全局设置,关联前面准备的jdk和ant




7、jenkins 新建自由风格的job

(2)配置“构建触发器”->“Poll SCM”,输入*/60 * * * *,代表每60分钟构建一次,如果代码未更新则不构建,此处为cron表达式,不懂的可以百度,不会的可以用在线工具生成,http://cron.qqe2.com/

(3)配置“构建”,新建“Execute Shell”,录入如下内容,关闭tomcat服务:

[python] view plain copy

  1. export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.0.35  

  2. echo "[Deploy] Shutting down tomcat"  

  3. if [ `ps auxwwww|grep $TOMCAT_HOME|grep -v grep|wc -l` -gt 0 ]  

  4. then  

  5. for pid in `ps auxwww|grep $TOMCAT_HOME|grep -v grep|tr -s ' '|cut -d ' ' -f2`  

  6. do  

  7. kill -9 $pid 2>&1 > /dev/null  

  8. done  

  9. fi  

(4)配置“构建”,新建“Invote Ant”,并且点“高级”:


AntVersion 选择刚才配置的ant

BuildFile 输入:build.xml(如果此文件不在项目根目录,则应该写上其路径)

Properties输入:TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.0.35,这个参数是在build.xml中调用的
(5)配置“构建”,新建“Execute Shell”,录入如下内容,启动tomcat服务:

[python] view plain copy

  1. echo "[Deploy] Starting up tomcat"  

  2. export BUILD_ID=XXXXXX  

  3. /usr/local/tomcat/apache-tomcat-8.0.35/bin/startup.sh  


8、启动吧!注意查看Console Output。



以上是关于jenkins+tomcat+ant+java+linux 自动部署项目的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins+svn+ant+tomcat持续集成

Jenkins+Ant+JMeter集成

Ant+Jmeter+Jenkins集成

Tomcat+Jenkins+Ant+Jmeter搭建

Centos7搭建 jdk+tomcat+ant+jmeter+jenkins自动化测试平台

centos7搭建ANT+jmeter+jenkins接口测试自动化环境