请注明出处:http://blog.csdn.net/toella/article/details/7335236
由于平时工作比较散,各个项目管理方式不同,每次发布、备份、打标、打包等管理要求各不相同,因此每次凑在一起就很浪费时间,为了很好很安全很准确的进行配置管理,工作统一用ANT进行,以下是工作中的应用描述,仅供参考。
而我们的配置管理用了CVS、VSS、协同,考虑到实际使用的灵活性,我将CVS除add功能及协同的功能外的所有功能都使用ANT来操作,减少了我大量的工作量,同时出错率降低了,每次还有日志跟踪每次的操作是否顺利完成或出错。
注意:当备注“<--”和“-->”之间存放过多代码后,程序将会无法辨识而不能正确执行代码,因此备注中尽量不要保存正式代码。
一、打标
下载版本日志的主要语句如下:
//指定下载的CVS库及目录、文件
<property name="cvsroot" value="MC" />
<property name="cvsproject1" value="MC_SERVICE_CLIENT\版本日志.txt" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//下载版本日志文件
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="版本日志.txt" command="commit -m '${message}'" dest="${locall.backup.dir}/${today}/${cvsprojecta1}" passfile="ant-cvs.cvspass" />
下载下来的版本日志被分别放入相应的项目目录里,打开查看今天该打标的标号如:v1_0_2(20091009),然后就可以对起打标了,其主要代码如下:
//指定打标的CVS库及目录
<property name="cvsroot" value="MC" />
<property name="cvsproject1" value="MC_SERVICE_CLIENT" />
//指定打标的标号
<property name="tag1" value="v1_0_2(20091009)" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//打标
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="rtag -f ${tag1}" dest="." passfile="ant-cvs.cvspass" />
//删除标号,当打标错误,可以删除该标记
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="rtag -d ${tag1}" dest="." passfile="ant-cvs.cvspass" />
二、对某指定日期时间打标
有时需要对某天某时刻的代码版本进行打标,这时的主要代码如下:
//指定CVS库
<property name="cvsroota" value="workflow" />
//指定打标的模块
<property name="cvsprojecta2" value="BPMApplication" />
//指定打标的标号
<property name="taga2" value="v_2_2_7(20091009)" />
//指定想要被打标的日期时间
<property name="datatimea2" value="2009-10-17 12:00:00" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroota}" password="${pwd}" passfile="ant-cvs.cvspass" />
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroota}" package="${cvsprojecta2}" command="rtag -D '${datatimea2}' ${taga2}" dest="." passfile="ant-cvs.cvspass" />
三、新建分支
//指定CVS库
<property name="cvsroot" value="oaTOP" />
//指定分支的模块
<property name="cvsproject" value="CMP" />
//指定被分支的版本
<property name="tag" value="v4_5_5(20090820)" />
//指定分支名称
<property name="tagB" value="B_v4_5_5" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//新建分支
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject}" command="rtag -b -r ${tag} ${tagB}" dest="." passfile="ant-cvs.cvspass" />
四、对分支打标
//指定CVS库
<property name="cvsroot" value="oaTOP" />
//指定分支的模块
<property name="cvsproject" value="CMP" />
//指定被分支的版本
<property name="tag" value="v4_5_5(20090820)" />
//指定分支名称
<property name="tagB" value="B_v4_5_5" />
//对分支打标的标号
<property name="tagB1" value="Root_B_v4_5_6" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//对指定分支进行打标
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject}" command="rtag -r ${tagB} ${tagB1}" dest="." passfile="ant-cvs.cvspass" />
五、下载CVS库内容
//指定CVS库
<property name="cvsroota" value="workflow" />
//指定下载的模块
<property name="cvsprojecta2" value="BPMApplication" />
//登陆CVS库
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroota}" password="${pwd}" passfile="ant-cvs.cvspass" />
//下载指定模块内容
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroota}" package="${cvsprojecta2}" command="checkout" dest="${locall.backup.dir}/${today}" passfile="ant-cvs.cvspass" />
六、下载CVS分支内容
//指定CVS库
<property name="cvsroot" value="oaTOP" />
//指定分支的模块
<property name="cvsproject" value="CMP" />
//指定被分支的版本
<property name="tag" value="v4_5_5(20090820)" />
//指定分支名称
<property name="tagB" value="B_v4_5_5" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//下载指定分支内容
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject}" command="checkout -r ${tagB}" dest="${locall.backup.dir}/${today}" passfile="ant-cvs.cvspass" />
七、备份
VSS的备份,主要代码如下:
//指定vss本地安装目录vss命令所在目录
<property name="vss.ssdir" value="C:\Program Files\Microsoft Visual Studio\VSS\win32" />
//指定vss库
<property name="vss.svrdir" value="\\10.17.0.222\any3_amp" />
//指定备份的所在目录
<property name="vss.path" value="$/08_发布包/" />
//登陆VSS服务器
<exec executable="cmd">
<arg value="/c"/>
<arg value="net use \\10.17.0.222\ipc$ /del"/>
<arg value="net use \\10.17.0.222\ipc$ /user:username password"/>
//登陆vss库,在使用vssadd时,必须使用vsscp,两者是配套使用的。
<vsscp vsspath="${vss.path}"
login="${username},${pwd}"
ssdir="${vss.ssdir}"
serverpath="${vss.svrdir}"
/>
//添加备份内容到指定vss库中指定目录中
<vssadd localpath="${locall.backup.dir}\${today}"
login="${username},${pwd}"
ssdir="${vss.ssdir}"
serverpath="${vss.svrdir}"
recursive="true"
comment="add new files"
autoresponse="Y"
/>
八、修改备份
当某个备份项目产生变化需要覆盖备份时,主要代码如下:
//指定vss本地安装目录vss命令所在目录
<property name="vss.ssdir" value="C:\Program Files\Microsoft Visual Studio\VSS\win32" />
//指定vss库
<property name="vss.svrdir" value="\\10.17.0.222\any3_esp" />
//指定要修改的备份包
<property name="vss.path" value="$/11_发布包/20090915/ESP发布包(was)20090915.rar" />
//登陆VSS服务器
<exec executable="cmd">
<arg value="/c"/>
<arg value="net use \\10.17.0.222\ipc$ /del"/>
<arg value="net use \\10.17.0.222\ipc$ /user:username password"/>
//下载要修改的备份包
<vsscheckout vsspath="${vss.path}"
localpath="${locall.backup.dir}/${today}"
login="${username},${pwd}"
ssdir="${vss.ssdir}"
serverpath="${vss.svrdir}"
recursive="true"/>
//上传要修改的备份包
<vsscheckin vsspath="${vss.path}"
localpath="${locall.backup.dir}/${today}"
login="${username},${pwd}"
ssdir="${vss.ssdir}"
serverpath="${vss.svrdir}"
recursive="true"
autoresponse="Y"
comment="Modified by automatic build"/>
九、备份到CVS
备份到CVS上一定要注意上传的顺序:
1、 添加根目录文件
2、 添加子目录
3、 添加子目录下文件
一定要一步一步来,否则会出错。
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//添加目录到CVS
//cvs add foldname
//cvs commit -m "test" foldname
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="add" dest="foldname所在目录/foldname" passfile="ant-cvs.cvspass" />
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="commit -m '${message}'" dest="foldname所在目录/foldname" passfile="ant-cvs.cvspass" />
//添加文件到CVS
//cvs add file2.bak 这里的file2.bak可以直接用*.*代替,表示添加上传所有文件
//cvs commit -m "test" file2.bak
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="add" dest="file2.bak所在目录/file2.bak" passfile="ant-cvs.cvspass" />
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="commit -m '${message}'" dest="file2.bak所在目录/file2.bak" passfile="ant-cvs.cvspass" />
十、获取备份
当实施申请提供某备份时,其主要代码如下:
//指定vss本地安装目录vss命令所在目录
<property name="vss.ssdir" value="C:\Program Files\Microsoft Visual Studio\VSS\win32" />
//指定vss库
<property name="vss.svrdir" value="\\10.17.0.222\any3_cobble" />
//指定备份所在目录及想要获取的备份包名
<property name="vss.path" value="$/02_协同办公(Any3_cobble)/B_对外输出项/02-对外发布/a.完整包/CMP_v4.5.6(20091009).rar" />
//登陆VSS服务器
<exec executable="cmd">
<arg value="/c"/>
<arg value="net use \\10.17.0.222\ipc$ /del"/>
<arg value="net use \\10.17.0.222\ipc$ /user:username password"/>
//获取备份包
<vssget vsspath="${vss.path}"
localpath="${locall.backup.dir}/${today}"
login="${username},${pwd}"
ssdir="${vss.ssdir}"
serverpath="${vss.svrdir}"
autoresponse="Y"
recursive="true"
quiet="true"/>
十一、登记
//指定CVS库
<property name="cvsroot" value="bpms_release" />
//指定登记文件
<property name="cvsproject1" value="业务流程发布管理\产品发布记录\BPMs产品发布记录表.xls" />
<property name="cvsproject2" value="业务流程发布管理\产品发布记录\BPMs产品版本管理.xls" />
//指定登记配置文件上传目录
<property name="cvsprojecta1" value="业务流程发布管理\产品发布记录\" />
//登陆CVS
<cvspass cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" password="${pwd}" passfile="ant-cvs.cvspass" />
//下载登记文件
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject1}" command="checkout" dest="${locall.backup.dir}/${today}" passfile="ant-cvs.cvspass" />
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="${cvsproject2}" command="checkout" dest="${locall.backup.dir}/${today}" passfile="ant-cvs.cvspass" />
//上传登记配置文件
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="BPMs产品发布记录表.xls" command="commit -m '${message}'" dest="${locall.backup.dir}/${today}/${cvsprojecta1}" passfile="ant-cvs.cvspass" />
<cvs cvsroot=":pserver:${username}:${pwd}@10.17.8.222/${cvsroot}" package="BPMs产品版本管理.xls" command="commit -m '${message}'" dest="${locall.backup.dir}/${today}/${cvsprojecta1}" passfile="ant-cvs.cvspass" />