经过两周的联调,后台终于调通了,进入到QA阶段,不能再随心所欲的部署了。代码必须要从SVN上取。改进了一下原来的脚本。
Ant 本身只有CVS任务,没有SVN支持。调研了一下,大概有两种方法从SVN check out 代码。
第一种方式是利用svnant,另一种则利用SVNKit命令行。
1、Svnkit
http://svnkit.com/download.php
SVNKit是一个纯Java的工具,它实现了所有的Subversion功能,并提供API来与Subversion协同工作,访问和操作Subversion版本库。
<!-- *************************************************************** -->
<!-- 首先需要引入Svnkit的包 ganymed.jar, svnkit.jar,svnkit-cli.jar 是必须的-->
<!-- *************************************************************** -->
<path id="SVNLib">
<fileset dir="${ANT_HOME}/lib/" includes="*.jar"/>
</path>
<target name="svnCheckout">
<property name="source-root" value="/usr/src"/>
<property name="repository.URL" value="https://xxx.xxx.xxx"/>
<java classname="org.tmatesoft.svn.cli.SVN" dir="${source-root}/TEST" fork="true" failonerror="true">
<arg value="co"/>
<arg value="--username"/>
<arg value="${svnuser}"/>
<arg value="--password"/>
<arg value="${svnpassword}"/>
<arg value="-N"/>
<arg value="${repository.URL}/TESTING"/>
<classpath refid="SVNLib"> </classpath>
</java>
</target>
2、SvnAnt
http://subclipse.tigris.org/svnant.html
SvnAnt 继承自Ant任务,实现了Subversion版本控制功能。在svnClientAdapter的帮助下,<svn>任务使用javahl 或者
svn命令行工具来实现版本控制。SvnAnt支持大多数的主要Subversion命令。
####START of SVN Properties ####
svn.repository.url=http://xyz.com/repos/somereponame
svn.project.base.path=someprojectname
svn.username=user name to access repo
svn.password=password to access repo
#This shall be name of the tag,
#This property should always be updated before build starts
#This property shall be used to export
tag.name=SOME_TAG_NAME_12222008
#This shall be name of new branch,
#this property should be used only when new branch is to be created
new.branch.name=NEW_BRANCH_12222008
####END of SVN Properties ####
Content of svn-tasks.xml:
<property file="build.properties"></property>
<!-- SVN and SVN-ANT Tasks properties -->
<property name="svn.repository.url" value="${svn.repository.url}"/>
<property name="svn.project.base.path" value="${svn.project.base.path}" />
<property name="svn.base.url" value="${svn.repository.url}/${svn.project.base.path}"/>
<property name="svnant.lib.dir" location="svn-ant-lib"/>
<property name="svnant.javahl" value="false" />
<property name="svnant.svnkit" value="true" />
<!-- SVN and SVN-ANT Tasks properties -->
<!-- *************************************************************** -->
<!-- Set-Up of SVN-ANT classpath -->
<!-- *************************************************************** -->
<path id="svnant.classpath">
<fileset dir="${svnant.lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- *************************************************************** -->
<!-- Loading of SVN task -->
<!-- *************************************************************** -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" />
<!-- *************************************************************** -->
<!-- tool-availability: Determine if SVN-ANT is available. -->
<!-- *************************************************************** -->
<target name="tool-availability">
<available resource="org/tigris/subversion/svnant/svnantlib.xml"
classpathref="svnant.classpath"
property="available.svnant"
/>
<echo message="SVN-ANT is available = ${available.svnant}"/>
</target>
<!-- **************************************************************** -->
<!-- does-svnant-exist: depends on tool-availablility and -->
<!-- displays error message -->
<!-- ***************************************************************** -->
<target name="does-svnant-exist" depends="tool-availability">
<fail unless="available.svnant">
SVN-ANT is not available, cannot perform tagging or checkout/export svn ant task.
</fail>
</target>
<!-- ****************************************************************** -->
<!-- Prepare the bulid resource. -->
<!-- QA: svnCheckout. -->
<!-- ******************************************************************* -->
<target name="svnCheckout" description="Checking out files from a repository using svnant task">
<property name="svn.checkout.message" value="Checking out Project ${project.name} from trunk. " />
<property name="app.url" value="${svn.repository.url}/${svn.project.base.path}" />
<echo message="${svn.checkout.message}" />
<echo message="${app.url}" />
<svn javahl="${svn.javahl}" svnkit="${svn.svnkit}" username="${svn.username}" password="${svn.password}">
<!-- Java source code -->
<checkout url="${app.url}/src" destPath="${deploy.src}" />
<!-- Other resource -->
<checkout url="${app.url}/${webAppDir}" destPath="${deploy.build}" />
</svn>
</target>