ANT 自动化部署实现方案
SVN自动拉取项目 autoSvn.bat
@echo off
@echo ====================================
@echo author callens
@echo update:2017-03-17
@echo ====================================
rem SVN安装目录
set svn_home=D:\Program Files\TortoiseSVN\bin
rem SVN工作目录
set svn_work=D:\SVN\
rem SVN日志目录
set setup_path=E:\antCmd\svn_log
@echo 正在更新目录 %svn_work%
if exist %svn_work% GOTO:gengxin else GOTO:MK
:MK
@echo 请检查您的工作目录是否正确
echo & pause GOTO:END
@echo 更新完成退出
goto:END
:END
exit
:gengxin
if exist "%setup_path%"\autoUpdate.log(echo update:%date% %time% >> "%setup_path%"\autoUpdate.log) else echo create:%date% %time% >> "%setup_path%"\autoUpdate.log
"%svn_home%"\TortoiseProc.exe/command:update /path:"%svn_work%" /notempfile /closeonend:1
exit
git 自动拉取项目 autoGit.bat
title GIT数据下载
color 16
@echo off
rem 当前的工作目录
set work_home=E:\gitTest\interface
rem GIT CMD命令工作目录
set git_home=D:\Program Files\Git\cmd
rem 设置git的环境变量
set path=%path%;D:\Program Files\Git\cmd
@echo ====================================
@echo author callens
@echo update:2018-07-18
@echo ====================================
cd /d %git_home%
echo GIT工作目录是:%cd%
echo git 版本号
git --version
cd /d %work_home%
rem develop为分支名称
git pull origin develop
pause
shell脚本启动tomcat shell.txt
#!/bin/sh
#关闭tomcat
source /etc/profile;sh project/tomcat/bin/shutdown.sh
#查看进程
ps -ef|grep /home/ifg/project/tomcat
sleep 20s
#关闭进程 ${tomcatPath}
ps -ef|grep -v 'grep'|grep /home/ifg/project/tomcat|awk '$3~/[0-9]+/{print $2}'|while read s;do kill -9 $s; done;
sleep 10s
#删除缓存
rm -rf project/tomcat/webapps/pfm
rm -rf project/tomcat/work/Catalina/localhost/pfm
#启动tomcat
source /etc/profile;nohup sh project/tomcat/bin/startup.sh > nohup.out &
ps -ef|grep /home/ifg/project/tomcat
ant 部分脚本内容
使用svn需要注意的内容,如果使用bat脚本则不需要这些内容,需要注意的是
个人使用这种方式不是太好,最好使用bat的方式,能够直接使用当前svn的一些命令,和当前项目比较契合
<!-- 使用SVN的话,需要把svnant包下的lib的所有文件复制到ant的lib下 -->
<property name="svn.dir" value="https://127.0.0.1/svn/investplatform/investplatfrom/trunk" />
<!-- 需要引入svn task文件,使svn任务可以使用 -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" />
<!-- 设置svn相关属性-->
<svnSetting id="svn.setting" svnkit="true" username="callens" password="callens" javahl="false" />
<!-- copySVN的目录结构到antwork中 -->
<target name="checkout" depends="clear" description="下载SVN文件">
<echo message="begin deploy..." />
<svn refid="svn.setting">
<checkout url="${svn.dir}/easyframe" destPath="${copytodir}/" revision="HEAD" force="true" />
</svn>
<echo message="begin deploy..." />
</target>
如果使用lomback的话,需要使用ECJ进行便以文件,平常的javac编译会报错
<!-- 使用eclipse jdt 进行编译,而不使用JDK编译,需要引入JDTC -->
<!-- org.eclipse.jdt.core_3.xx.x.vX.jar 这个jar包可以在eclipse安装路径下的 plugins 下找到 -->
<!-- 使用jdt编译,需要添加jar:org.eclipse.jdt.compiler.tool_1.1.0.vX.jar,org.eclipse.jdt.core_3.11.2.vX.jar,
org.eclipse.jdt.debug.ui_3.7.101.vX.jar,jdtCompilerAdapter.jar(需要从)org.eclipse.jdt.core_3.11.2.vX.jar中解压 -->
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
<!-- etc.jar.path=${ant.dir}/lib/ecj-4.6.3.jar 这个jar可以在ant的lib中找到-->
<!-- 开始编译项目 -->
<target name="initInterface" depends="copyJarToInterface">
<delete dir="${interface.class}" />
<mkdir dir="${interface.class}" />
<echo message="interface compile running" />
<exec executable="${jdk.dir}/bin/java">
<arg value="-javaagent:${lombok.jar.path}=ECJ"/>
<arg value="-jar"/>
<arg value="${etc.jar.path}"/>
<arg value="-cp"/>
<arg pathref="interface.jar"/>
<arg value="-d"/>
<arg value="${interface.class}"/>
<arg value="${interface.src}"/>
<arg value="-source"/>
<arg value="1.8"/>
</exec>
<echo message="interface copy config file to classes" />
<copy todir="${interface.class}" overwrite="true">
<fileset dir="${interface.src}">
<include name="**/*.xml" />
<include name="**/*.properties" />
<include name="**/*.sql" />
<include name="**/*.doc" />
<include name="**/*.docx" />
<exclude name="/src/*_prd.*" />
<exclude name="/src/rebel.xml" />
</fileset>
</copy>
<echo message="interface copy environment science config file to classes" />
<copy todir="${interface.class}" overwrite="true">
<fileset dir="${interface.env.path}/${interface.env}/" >
<include name="**/*.*" />
</fileset>
</copy>
</target>
<?xml version="1.0" encoding="GBK" ?>
<project name="msp" default="shellTomcat" >
<property environment="env" />
<property name="svn.bat" value="E:\antCmd\autoSvn.bat" />
<property file="${propertiesPath}/property.properties" /><!-- 引入属性文件 -->
<!--更新SVN/git 都是执行bat-->
<target name="exec" depends="clear" description="更新SVN">
<echo message="begin deploy..." />
<exec executable="cmd.exe">
<arg line="/c ${svn.bat}" />
<arg line="/c exit" />
</exec>
<echo message="begin deploy..." />
</target>
<!-- 新建文件夹 -->
<mkdir dir="${trusteeVisualTargetPath}" />
<!-- 删除文件夹 -->
<delete dir="${msp.build.dir}/classes" />
<delete includeEmptyDirs="true"><!-- 哪些文件不需要进行删除 -->
<fileset dir="${copytodir}" includes="**/*" defaultexcludes="no"/>
</delete>
<!-- 复制文件,过滤一些不需要复制的内容 -->
<copy todir="${trusteeVisualTargetPath}" >
<fileset dir="${trusteeVisualSourcePath}">
<exclude name="**/*_prd.*" />
<exclude name="**/*-prd.*" />
<exclude name="**/rebel.xml" />
</fileset>
</copy>
<!-- 初始化classpath,添加编译的时候执行必要的jar包 -->
<path id="project.classpath">
<!-- 项目的jar包 -->
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
<!-- ant lib包 -->
<fileset dir="${ant.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- 编译msp的java -->
<target name="compileMsp" depends="init" description="编译MSP 的java文件">
<echo message="begin compile..." />
<javac fork="true" executable="${jdk.dir}" srcdir="${msp.src.dir}" destdir="${msp.build.dir}/classes"
includeantruntime="false" nowarn="on"
source="1.7" target="1.7" deprecation="true" debug="true"
encoding="GBK" optimize="true" failonerror="on" classpathref="project.classpath"
>
<compilerarg line="-Xlint:unchecked" />
<compilerarg line="-Xlint:deprecation" />
</javac>
<copy todir="${msp.build.dir}/classes">
<fileset dir="${msp.src.dir}">
<include name="**/*.xml" />
<include name="**/*.properties" />
<include name="**/*.sql" />
<include name="**/*.doc" />
<include name="**/*.docx" />
</fileset>
</copy>
<echo message="end compile..." />
</target>
<!-- 将项目 class文件打成 jar包 -->
<target name="pack" depends="compile">
<jar jarfile="${copytodir}/${frame.webapp.name}.jar">
<fileset dir="${frame.build.dir}/classes">
<!-- <include name="**/*.class"/> -->
</fileset>
</jar>
</target>
<!-- 打成war包, 名称默认为 项目名 -->
<target name="war" depends="compileMsp" description="将工程打成war包">
<echo message="begin war..." />
<war destfile="${copytodir}/${msp.webapp.name}.war" basedir="${webRoot.dir}" webxml="${webRoot.dir}/WEB-INF/web.xml">
<lib dir="${lib.dir}" />
<classes dir="${msp.build.dir}/classes" />
<fileset dir="${webRoot.dir}">
<include name="***.*" />
</fileset>
</war>
<echo message="end war..." />
</target>
<!-- 如果使用scp ,则需要下载jsch-0.1.54.jar文件 -->
<target name="updateHost" depends="war" description="将war包放入服务器中">
<echo message="begin deploy..." />
<scp todir="${root.name}:${root.pwd}@${root.url}:${root.path}" file="${war.path}" trust="yes" knownhosts="E:\antCmd/.ssh/knownhosts"></scp>
<echo message="end deploy..." />
</target>
</project>
使用ant远程操作tomcat
<!-- 调用shell脚本 -->
<target name="execShell" depends="copyFile" description="重新启动tomcat">
<echo message="begin deploy..." />
<sshexec host="${root.url}" username="${root.name}" password="${root.pwd}" trust="true" failonerror="false"
commandResource="${shell.path}" />
<echo message="end deploy..." />
</target>