Jenkins+Git+Tomcat自动化部署(Linux环境Jenkins)
作者:互联网
先看下参数构建页面效果
说明:projectname是要部署的项目,SSH_Server是项目运行所在的服务器,GitBranch为分支,from_commitid为远程git仓库项目代码提交id的起始版本,to_commitid为截止版本,如下图,如果要等到红框提交版本的增量部署,那么起始版本为椭圆形的版本,截止版本为红框版本。
下面开始配置
1、设置参数:
2、从git拉取代码:
3、设置一下构建环境,每次构建前先清空工作空间:
4、构建前准备,包括复制build.xml的ant脚本,(下面附上脚本)
<?xml version="1.0" encoding="UTF-8"?> <project name="Deploy" default="compile" basedir="."> <property environment="env" /> <property name="webapp.name" value="Deploy" /> <property name="catalina.home" value="/usr/tomcat/apache-tomcat-7.0.94" /> <property name="dist.dir" value="${basedir}/dist" /> <property name="ant.dir" value="/usr/ant/apache-ant-1.9.14" /> <property name="webRoot.dir" value="${basedir}/WebRoot" /> <property name="src.dir" value="${basedir}/src" /> <!--<property name="config.dir" value="${basedir}/config" />--> <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" /> <property name="build.dir" value="${webRoot.dir}/WEB-INF" /> <!-- 使用eclipse jdt进行编译,而不使用JDK编译 --> <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> <!-- 初始化classpath --> <path id="project.classpath"> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> <!-- 添加tomcat类路径 --> <fileset dir="${catalina.home}/lib"> <include name="*.jar" /> </fileset> <!-- ant lib包 --> <fileset dir="${ant.dir}"> <include name="**/*.jar" /> </fileset> </path> <!-- get the source compile classpath in a printable form --> <pathconvert pathsep="${line.separator}| |-- " property="echo.path.compile" refid="project.classpath"> </pathconvert> <!-- show classpath jars --> <target name="print_classpath"> <echo message="|-- compile classpath"/> <echo message="| |"/> <echo message="| |-- ${echo.path.compile}"/> </target> <!-- 删除之前的目录结构 --> <target name="clear" description="清理旧文件"> <delete dir="${build.dir}/classes" /> <delete dir="${dist.dir}" /> <delete file="${catalina.home}/webapps/${webapp.name}.war" /> <delete dir="${catalina.home}/webapps/${webapp.name}" /> </target> <!-- 创建目录结构 --> <target name="init" depends="clear" description="创建初始化目录结构"> <mkdir dir="${build.dir}/classes" /> <mkdir dir="${dist.dir}" /> </target> <!-- 编译java --> <target name="compile" depends="init" description="编译java文件"> <echo message="begin compile..." /> <javac srcdir="${src.dir}" destdir="${build.dir}/classes" includeantruntime="false" nowarn="false" source="1.6" target="1.6" deprecation="true" debug="true" encoding="UTF-8" classpathref="project.classpath" > <compilerarg line="-Xlint:unchecked" /> <!--<classpath refid="project.classpath" /> --> </javac> <copy todir="${build.dir}/classes"> <!--<fileset dir="${src.dir}"> <include name="**/*.xml" /> <include name="**/*.properties" /> <include name="**/*.sql" /> </fileset>--> <fileset dir="${src.dir}"> <exclude name="**/*.java" /> <exclude name="test/**.*" /> <exclude name="**/*.properties" /> <exclude name="**/*.propertites" /> </fileset> </copy> <delete dir="${build.dir}/classes/test" /> <echo message="end compile..." /> </target> <!-- 将class文件打成 jar包 --> <target name="pack" depends="compile"> <jar jarfile="${build.dir}/${webapp.name}.jar"> <fileset dir="${build.dir}/classes"> <include name="**/*.class"/> </fileset> </jar> </target> <!-- 打成war包, 名称默认为 项目名 --> <target name="war" depends="compile" description="将工程打成war包"> <echo message="begin war..." /> <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}" webxml="${webRoot.dir}/WEB-INF/web.xml"> <lib dir="${lib.dir}" /> <classes dir="${build.dir}/classes" /> <fileset dir="${webRoot.dir}"> <include name="***.*" /> </fileset> </war> <echo message="end war..." /> </target> <!-- copy war包 tomcat的deploy目录 --> <!-- <target name="deploy" depends="war" description="部署项目"> <echo message="begin deploy..." /> <copy file="${dist.dir}/${webapp.name}.war" todir="${catalina.home}/webapps" /> <echo message="end deploy..." /> </target> --> </project>View Code
5、ant编译:
6、编译后获取增量class文件(附上代码):
#!/bin/bash cd $WORKSPACE projectname=ABC stringName=compile_list.txt stringName1=filelist.txt src=WebRoot\/WEB-INF\/classes scsspath=/scss/$projectname/webapps/$projectname/ #python loop.py -otf $stringName -ntf $stringName1 cp $stringName $stringName1 # 把清单中的属于配置文件的地址以及测试目录去掉,如xml和properties文件,test目录下的文件 sed -i '/./{/\.xml/d;/\.properties/d;/\.propertites/d;/\/test/d}' $stringName # 把com目录下如果有xml文件,则加入到增量清单中 grep ^.*\/com\/.*\.xml.*$ $stringName1>>$stringName # 把增量清单文件地址改为本地服务器文件地址 TheStart=$WORKSPACE/ sed -i "s#^#$TheStart&#g" $stringName sed -i "/./{s/.java/.class/;s#src#$src#}" $stringName #sed -i 's/.java/.class/g' $stringName #sed -i 's#src#$src#g' $stringName # 若果不是文件,为目录的行则删除掉 sed -i -e '/\./!d' $stringName localdir=$WORKSPACE tempdir=$localdir/temp WebRoot=$tempdir/WebRoot/ cd $localdir # 如果存在旧的temp目录,则删除掉 if [ -d "$tempdir" ];then rm -rf $tempdir echo 删除旧的temp目录 fi mkdir $tempdir #复制增量清单为一个临时文件tempfile.txt备用,后面用这个临时文件生成增量目录清单 #cp $stringName tempfile.txt cp $stringName origindir.txt #sed -i 's#$localdir#$tempdir#g' tempfile.txt #遍历目录清单并按清单新建目录 echo 按目录清单新建目录并把增量文件复制到temp目录下 while read line do #把temp目录加在路径里 eval newfilepath=${line/$localdir/$tempdir} #获取temp的文件路径,不包含文件名 eval newfiledir=`dirname $newfilepath` if [ ! -d "$newfiledir" ];then #新建temp目录下的文件路径 eval mkdir -p $newfiledir echo 新建目录$newfiledir完成 fi #以圆点分割去掉原文件路径中文件扩展名,并获取左边部分 eval originfilepath=${line%.*} if [ -f $originfilepath.class ];then eval cp $originfilepath*.class $newfiledir/ elif [ -f $originfilepath.xml ];then eval cp $originfilepath.xml $newfiledir/ else eval cp $originfilepath*.* $newfiledir/ fi done<origindir.txt #生成增量清单 if [ -f $projectname\_$GitBranch.xls ];then yes|rm $projectname\_$GitBranch.xls fi for files in `find $tempdir -name "*.*"` do echo $files >>$projectname\_$GitBranch.xls done echo 生成增量清单$projectname\_$GitBranch.xls #把清单中每行的文件地址由本地地址变更为项目服务器地址 sed -i "s#$WebRoot#$scsspath#g" $projectname\_$GitBranch.xls if [ -d "$WebRoot" ];then cd $WebRoot else echo 增量文件复制到temp目录没有成功或版本$from_commitid到版本$to_commitid间根本就没有增量文件!!! exit 1 fi echo 进入$WebRoot目录打tar包 tar -cvf WebRoot.tar ./ cd $WORKSPACE cp $JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER/log $WORKSPACE/ error=`cat log|grep ": Error"` if [ ! -n "$error" ];then echo 构建完成。 else echo 构建出错!!! exit 1 fiView Code
7、构建后通过SSH把增量文件上传到服务器,并解压,重启服务
cd /scss/$projectname/webapps compiledir=$projectname if [ "$projectname" == "sds" ];then compiledir=sds fi if [ "$projectname" == "ATFE" ];then compiledir=TFE fi if [ $firsttime == Y ];then tar zcvf $compiledir.tar.gz $compiledir fi cp /scss/$projectname/webapps/temp/WebRoot/WebRoot.tar WebRoot.tar rm -rf temp tar -xvf WebRoot.tar -C $compiledir pid=`ps aux|grep java|grep $projectname|grep -v grep|awk '{print $2}'` if [ "${pid}" ]; then kill -9 $pid else echo "server is not started,can startup" fi sh /scss/$projectname/bin/startup.sh sleep 10 pid=`ps aux|grep java|grep $projectname|grep -v grep|awk '{print $2}'` if [ "${pid}" ]; then echo "restart ok,server is running and pid=$pid" else echo "restart fail,server is not started" exit 1 fi
配置完成,就可以构建了。
还有需要把下面这些文件放到Linux的ant/lib目录下:
这些安装了eclipse的话都会有的,去eclipse下面找
标签:Git,grep,Tomcat,projectname,echo,WebRoot,Jenkins,stringName,目录 来源: https://www.cnblogs.com/lkc-test/p/11891563.html