为了发布所准备的内容有:1.标示发布的唯一名字和版本号,如userview-2.1。2.完整的功能和文件,例如说明文档和历史文件。3.安装方法,例如安装脚本或者安装包。
发布的步骤为:1.发布工作应该从系统建立之初开始。2.首先应该对发布进行同步。所有程序员对代码进行签入。3.对当前工作进行健全性检查。即首先从仓库中签出代码,然后运行构建代码,修改到构建能够成功运行。4.生成发布分支。参考***建立发布分支,一般发布分支使用RB_1_0这样的符号标示。5.签出分布发布内容并修改提交。6.修改完成后,对系统进行健全性检查,运行自动构建。7.选择分发需要的文件,要使最后的软件是软件产品而不是开发项目。一般而言发布版本包含的内容有:版权登记文件,自读帮助文件,可执行代码,文档,库和第三方库。8.定义打包脚本。9.打包带有测试的可选发布文件。10.产生发布。11.生成发布文件。12.对发布文件进行打标。13.提交发布。
下面我们就自动化过程构建这个自动发布过程的ant文件及bat脚本。
<?xml version="1.0" encoding="GBK-2312"?>
<project name="userview" default="release"basedir=".">
<!-- 如果未通过bat传入参数则默认版本号为888 -->
<propertyname="version" value="888"></property>
<!-- 检查主线目录内容 -->
<targetname="checktrunk">
<antantfile="cc-build.xml" target="build" />
</target>
<!-- 创建发布分支 -->
<targetname="mkreleasebranches" depends="checktrunk">
<execexecutable="svn">
<arg
line="copy-m 'release branch' svn://192.168.195.54/userview/trunksvn://192.168.195.54/userview/branches/RB_${version}" />
</exec>
</target>
<!-- 签出发布分支源代码 -->
<targetname="checkoutbranches" depends="mkreleasebranches">
<deletedir="userview" />
<execexecutable="svn">
<arg
line="checkout svn://192.168.195.54/userview/branches/RB_${version}RB_${version}" />
</exec>
</target>
<!--测试发布分支 -->
<targetname="buildandtestreleasebranches"depends="checkoutbranches">
<antantfile="build.xml" target="test"dir="RB_${version}" />
</target>
<!-- 生成发布文件 -->
<targetname="mkreleasefile"depends="buildandtestreleasebranches">
<zipdestfile="userview_${version}_${TODAY}.rar">
<filesetdir="RB_${version}/build">
<excludename="test-results" />
<excludename="test" />
</fileset>
<filesetdir="RB_${version}/vendor" />
<filesetfile="index.bat" />
</zip>
</target>
<!-- 测试分发文件内容 -->
<targetname="testrelease" depends="mkreleasefile">
<!--
<execexecutable="java"> <arg line="-classpath
RB_1_1\build\prod;vendor/lib/sqljdbc4.jar;userview.view"/> </exec>
<java
classpath="RB_${version}\build\prod;RB_${version}\vendor\lib\sqljdbc4.jar"
classname="userview.view"></java>
-->
<!-- 解压生成的发布文件 -->
<unzipsrc="userview_${version}_${TODAY}.rar" dest="userview_${version}"/>
<!-- 执行命令检查程序运行情况 -->
<execexecutable="java">
<arg
line="-classpathuserview_${version}\prod;userview_${version}\lib\sqljdbc4.jar;userview.view" />
</exec>
</target>
<!-- 标记发布 -->
<targetname="markrelease" depends="testrelease">
<execexecutable="svn">
<arg
line="copy-m 'tags ${version}' svn://192.168.195.54/userview/branches/RB_${version}svn://192.168.195.54/userview/tags/REL_${version}" />
</exec>
</target>
<!-- 分发呈送QA组 -->
<targetname="sendtoQA" depends="markrelease">
<movefile="userview_${version}_${TODAY}.rar"tofile="../userview_${version}_${TODAY}.rar"/>
</target>
<!-- 清理发布环境 -->
<targetname="release" depends="sendtoQA">
<deletedir="RB_${version}" />
<deletedir="userview_${version}" />
</target>
<tstamp>
<formatproperty="TODAY" pattern="yyyyMMdd" locale="en"/>
</tstamp>
</project>
定时脚本为:
ant -buildfile rb-build.xml -Dversion=%1
其中%1为传入的版本号参数。调用定时脚本为:
rb.bat 1_2
其中1_2为版本号。这样在userview的上级目录生成类似userview_1_3_20121202.rar的文件。
参考
4. Ant的主要任务的语法
5. Ant脚本的详细配置
6. Subversion综述