看了Joel Spolsky的《软件开发成功12法则》和《Daily Builds are Your Friend》,对于每日构建的必要性和实用性都深有感触。于是为自己的项目添加脚本以实现快捷的每日构建,并记述这个尝试的整个过程,方便以后参考。
所谓的每日构建就是每天至少一次的重新创建整个工程,每日构建本身只能算是一个保护代码有效性和快速修改快速出品的手段,但是要想快速将项目成果由代码构建成最终出品形式(如安装程序,CD镜像等)就需要一套工具的支持还有相应脚本的设定,每日构建需要做的工作正是实现这个过程。
每日构建过程中有很多环节,基础流程是从源代码管理系统中取出最新版本的源码,然后通过编译器编译,最后使用安装程序打包。我首先由从源代码管理系统中取出最新版本的源码开始。
这里讲解的是Visual SourceSafe的流程。
VSS本身有Command Line模式,按照帮助文档中的说法,Command Line的命令可以实现VSS界面程序的所有功能。而我现在只需要他的Get(获取最近版本),命令行如下:
ss get $/vss_code -I-Y -R -GLc:\daily_build_code -O@mycode.log
Ss
VSS Command Line模式的启动程序名
Get
获取最近版本的命令名称
$/vss_code
希望获取的程序路径,该路径可以通过VSS窗体程序的右键属性功能获取
-I-Y
对提问回答Y,如果没有这个参数则运行命令会在提问时等待用户输入。回答N,是-I-N
-R
递归获取,会把该目录下的所有子目录都取出来
-GLc:\daily_build_code
用来指定获取源码的路径,如果不设置则使用VSS的默认工作目录
-O@mycode.log
指定所有信息输出到log文件
注意1:这里指定了工作路径,一般来说为了构建能够不受原有环境的影响,最好每次构建都重新建立路径。如果有可能应该专门提供一台机器用来做每日的构建。
注意2:如果不指定log文件的绝对路径的时候,log文件会被建立到当前路径,如果你频繁的使用cd,md命令很可能会使这个位置不确定,所以建议使用绝对路径来指定log文件的位置。
以上的命令虽然是用来获取最近版本的,但在现实中还需要设置当前的环境变量。
如果你的VSS的服务端不在本机,需要指定服务路径,如下:
set ssdir=\\my_vss_server\vss_code
还需要指定用户名和密码,如下:
set ssuser = snail
set sspwd = chinaos.com
另外,如果你没有将VSS路径加入系统设置中,需要指定VSS路径:
set path=c:\program files\microsoft visual studio\common\vss\win32
最后要注意的是,因为指定了新的工作路径,你需要保证该目录的有效性。
这些工作都做完,得到的脚本用批处理表现出来就像下面的样子:
// vss.bat
set ssdir=\\my_vss_server\vss_code
set ssuser=snail
set sspwd = chinaos.com
set path=c:\program files\microsoft visual studio\common\vss\win32
c:
cd
md daily_build_code
ss get $/vss_code -I-Y -R -GLc:\daily_build_code -O@mycode.log
VSS Common Line提供的其他命令和参数,请参看VSS的帮助文档