ant svn 自动更新和发布

团队管理中,当项目非常多,而且发布频繁,手动发布往往非常繁琐,决定用自动化处理。

采用ant +svn+svnant

在网络上参考很多人的处理,组合成对自己比较实用的。

准备环境:

1、安装svn client 这个就不多说了。

2、安装ant,在这里我采用ant 1.8.3版本:http://ant.apache.org/

     官网上下载zip 解压缩,并配置环境变量。

3、下载svnant ,并解压缩 ,把对应的lib\jar包放入 ant lib 包中。

      下载地址: http://subclipse.tigris.org/files/documents/906/49042/svnant-1.3.1.zip

      这步很关键,不然svn命令运行不了!

思路:

       1、固定一个目录,专门做发布目录,根据不同项目,在期底下建立与项目名称相同的目录。

       2、建立build等目录,打成war包后删除对应的build包等操作

       3、自动发布到tomcat

以下代码实现的是J2EE web工程打包发布

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

<project name="deploy" default="autodeploy" basedir=".">
	<property environment="env" />
	<property name="projectName" value="svnant" />
	<property name="temporary.dir" value="D:/SVNTest/${projectName}"/>

	<property name="deployVersion.dir" value="${temporary.dir}/deployVersion"/>
	<property name="tomcat.home" value="d:/apache-tomcat-6.0.32"/>
	<property name="ant-lib.dir" value="F:/apache-ant-1.8.3/lib"/>

	<property name="svn.url" 
                         value="http://subclipse.tigris.org/svn/subclipse/trunk/svnant/"/>
	<property name="svn.name" value="guest"/>
	<property name="svn.password" value=""/>

	<tstamp>
		<format property="deploy.time" pattern="yy-MM-dd HH.mm" />
	</tstamp>

	<delete dir="${temporary.dir}" />
	<mkdir dir="${temporary.dir}" />

	<path id="svnant.dir">
		<fileset dir="${ant-lib.dir}">
			<include name="ganymed.jar" />
			<include name="jna.jar" />

			<include name="svnant.jar" />
			<include name="svnClientAdapter.jar" />
			<include name="svnjavahl.jar" />
			<include name="svnkit.jar" />
		</fileset>
	</path>
	<!-- define the svn task-->
	<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask"
                       classpathref="svnant.dir" />
	<!-- prepare for the checking out:clean the directory  -->
	<target name="prepare"
		description="Prepare the dirs for the task">
		<delete dir="${temporary.dir}/${projectName}" />
		<mkdir dir="${temporary.dir}/${projectName}" />
	</target>


	<target name="checkout" depends="prepare">
		<echo>+=========checkout start============+</echo>
		<echo>+                                                                      +</echo>
		<echo>+                                                                      +</echo>
		<svn username="${svn.name}" password="${svn.password}" 
                         javahl="false" failonerror="false" svnkit="true">
			<checkout url="${svn.url}" revision="HEAD" 
                                         destPath="${temporary.dir}/${projectName}" />
		</svn>
		<echo>+                                                                      +</echo>
		<echo>+========= checkout end ============+</echo>
	</target>

	<target name="ant_app" depends="checkout">
		<echo>+ ======================== +</echo>
		<echo>+                                                       +</echo>
		<echo>+  anting application to war and ear +</echo>
		<echo>+                                                       +</echo>
		<echo>+ ======================== +</echo>
		<ant dir="./" antfile="build.xml" inheritall="off"/>
	</target>

	<target name="mv_to_pack" depends="ant_app">
		<delete dir="${deployVersion.dir}\${deploy.time}" />
		<mkdir dir="${deployVersion.dir}\${deploy.time}" />
		<move file="${temporary.dir}/${projectName}.war" todir="${deployVersion.dir}/${deploy.time}" />
	</target>
	<target name="execute" depends="mv_to_pack">
	</target>

	<!--shutdown-->
	<target name="shutdown" description="========shutdowntomcat===========">
		<exec executable="${tomcat.home}/bin/shutdown.bat" failonerror="false">
		</exec>
		<sleep seconds="1"/>
		<delete file="${tomcat.home}/webapps/${projectName}.war">
		</delete>
		<delete dir="${tomcat.home}/webapps/${projectName}">
		</delete>
	</target>

	<!--startup-->
	<target name="startup" depends="shutdown" description="========startuptomcat===========">
		<copy file="${deployVersion.dir}/${deploy.time}/${projectName}.war" todir="${tomcat.home}/webapps" />
		<sleep seconds="3"/>
		<exec executable="${tomcat.home}/bin/startup.bat" failonerror="false">
		</exec>
	</target>

	<!--autodeploy-->
	<target name="autodeploy" depends="execute,startup">
		<delete file="${temporary.dir}/${projectName}">
		</delete>
	</target>
</project>
 
<?xml version="1.0" encoding="UTF-8"?>
	<project name="ear" default="deploy" basedir=".">
	 <property environment="env" />
	 <property name="projectName" value="svnant" />	
	 <property name="temporary.dir" value="D:/SVNTest/${projectName}"/>

	 <property name="builder.dir" value="${temporary.dir}/builder" />
	 <property name="project.dir" value="${temporary.dir}/${projectName}" />	
		
	 <property name="src.dir" value="${builder.dir}/src" />
	 <property name="WebRoot.dir" value="${builder.dir}/WebRoot" />
	 <property name="classes.dir" value="${WebRoot.dir}/WEB-INF/classes" />
	 <property name="lib.dir" value="${WebRoot.dir}/WEB-INF/lib" />
		
	 <path id="build.classpath" description="complie 's classpath">
	  <fileset dir="${temporary.dir}/${projectName}/WebRoot/WEB-INF/lib">
	   <include name="*.jar" />
	  </fileset>
	 	<!-- junit jar -->
	 	 <fileset dir="E:\eclipse\plugins">
 		   <include name="org.hamcrest.core_1.1.0.v20090501071000.jar" />
 		  </fileset>
	 	
	 	 <fileset dir="E:\eclipse\plugins\org.junit_4.8.2.v4_8_2_v20110321-1705">
 		   <include name="junit.jar" />
 		  </fileset>
	 	
	  <pathelement location="${classes.dir}" />
	 </path>
		
	 <target name="copy-files" description="copy,java files">
	  <delete dir="${builder.dir}" />
	  <mkdir dir="${builder.dir}" />
	  <mkdir dir="${classes.dir}" />
	  <mkdir dir="${lib.dir}" />
	  <!-- 
	  <mkdir dir="${WebRoot.dir}/apps" />
	  -->
	  <mkdir dir="${src.dir}" />

	  <copy todir="${src.dir}" overwrite="YES"> 
	   <fileset dir="${project.dir}/src" />
	  </copy>

	  <copy todir="${WebRoot.dir}" overwrite="yes">
	   <fileset dir="${temporary.dir}/${projectName}/WebRoot" excludes=".svn" />
	  </copy>

	 
	 </target>

	 <!-- compile file to share lib -->
	 <target name="compile" depends="copy-files">
	  <mkdir dir="${classes.dir}" />
	 	
	 	
	  <javac fork="true" memoryInitialSize="256m" memoryMaximumSize="500m" srcdir="${src.dir}" destdir="${classes.dir}" includes="**" encoding="UTF-8" debug="true">
	   <classpath refid="build.classpath" />
	  </javac>
	  <copy todir="${classes.dir}">
	   <fileset dir="${src.dir}" excludes="**/*.java" />
	  </copy>
	 	<!-- resources -->	
		<copy todir="${classes.dir}">
		   <fileset dir="${temporary.dir}/${projectName}/config"/>
		</copy>
	 </target>

	 <!-- create the war  -->
	 <target name="web-war" depends="compile" description="create war">
	 	
	 	
	 	
	  <war destfile="${builder.dir}/../${projectName}.war" webxml="${WebRoot.dir}/WEB-INF/web.xml">
	   <fileset dir="${WebRoot.dir}">
	   </fileset>
	  </war>
	 </target>

	 <!-- create the ear   -->
	 <target name="ear" depends="web-war" description="create ear">
	 <!--
	  <ear destfile="${builder.dir}/../${projectName}.ear" 
	  	appxml="${basedir}/META-INF/META-INF/application.xml" 
	  	duplicate="preserve">
	   <fileset dir="${basedir}/META-INF" includes="**/*.*" />
	   <fileset dir="${builder.dir}/..">
	    <include name="${projectName}.war" />
	   </fileset>
	  </ear>
	  -->
	 </target>
 	
	 <target name="deploy" depends="ear">
	  <echo>+ ===================================================== +</echo>
	  <echo>+                                                       +</echo>
	  <echo>+  Building Complete, Cleaning Temporary Files......    +</echo>
	  <echo>+                                                       +</echo>
	  <echo>+ ===================================================== +</echo>
	  <delete dir="${builder.dir}">
	  </delete>
	 </target>

	</project> 
 

bat :

@echo off
del deploy.log
call ant -f ./deploy.xml -debug -l deploy.log

start  deploy.log
 

OK ,搞定!

猜你喜欢

转载自xiaofengtoo.iteye.com/blog/1538794