图解持续集成--纯命令行实现.Net项目每日构建
该脚本工具是2007年在做产品研发觉得每天发布版本不方便,天天花费精力做一些价值不高的工作,便萌生了自己写脚本来实现每日构建的想法,花了大概两天的时间编写并调试通过。时过境迁,这个工具随着这个产品的升级换代,已经退出了“江湖”,为了记住这个小工具,特整理这个工具脚本,希望能对大家有帮助。
该构建使用的脚本下载
1. 构建流程
该构建分为三个步骤:
1. 从VSS服务器获取最新版本
1.1. 设置日志存放的地址,日志包括从VSS获取文件列表、复制文件列表、编译结果;
1.2. 删除编译文件夹下所有的文件,该文件夹为VSS获取文件存放地址,删除所有文件的目的在于每次获取最新全量版本;
1.3. 进入VSS的执行目录,设置用户信息,设置VSS地址以及访问的用户名、密码;
1.4. 从VSS目录中获取最新的版本到编译目录;
2. 编译程序
2.1. 遍历设置DLL文件夹中文件为非只读,该步骤不是必须,而是笔者产品中需要对该文件夹设置为非只读;
2.2. 版本号设定,版本号由四部分组成:主版本号.子版本号.发布号.编译日期,该步骤对版本号V0.8.0232.0810中的发布号自动加1,编译日期为当前日期;
2.3. 程序编译,调用VS.NET命令行工具进行编译;
3. 版本发布
3.1. 从编译文件夹复制到发布文件夹,把编译成功的所有文件夹复制到发布文件夹中;
3.2. 设置发布路径,在IIS中创建虚拟目录;
3.3. 修改文件的配置文件,由于发布路径中的配置信息有编译环境,修改配置配置文件适应发布环境;
2. 准备工作
在D:\JRTJ目录下建立如下文件夹:
- BuildDaily:用于存放构建版本
- BuildLogOfAuto:用户存放构建日志
- 自动编译脚本:存放每日构建脚本及辅助脚本
(*********** 图004)
自动编译脚本相关脚本说明:
- cscript.exe:Win32控制台脚本宿主引擎
- iisvdir.vbs:IIS6.0中用户创建虚拟目录脚本
- main.bat:构建主程序
- replace.exe:运行在Framework1.1下,用于替换关键字的执行程序
- version.exe:运行在Framework1.1下,用于版本号设置,加入当前时间并且每次自增1
- version.txt:用于记录当前版本号,具体格式参见构建流程中对版本号说明
- xcopy.exe:复制文件使用执行程序
3. 脚本内容
其中main.bat构建脚本内容如下:
2 :: 程序打包、版本发布、备份程序
3 :: create&edit by shishanyuan 2007-9-18 17:25
4 :: 在windwo2003、iis6.0、framework1.1环境下测试通过
5
6 rem 步骤一:从VSS获取最新的文件到编译文件夹下
7 rem ###################################################
8 rem 设置日志存放的地址
9 set LogFile=D:\JRTJ\BuildLogOfAuto\%date:~0,4%%date:~5,2%%date:~8,2%\
10 md %LogFile%
11
12 rem 删除编译文件夹下所有的文件
13 set GetToFolder=E:\VSS_DB_DJZ\综合报送产品改造项目\编码目录\人行集中版\PBOCWeb\
14 rmdir /s /q %GetToFolder%
15 md %GetToFolder%
16
17 rem 进入VSS的执行目录,设置用户信息
18 set path=D:\Program Files\Microsoft Visual Studio\Common\VSS\win32
19 set ssdir=\\10.168.165.40\vss_db_djz
20 set ssuser=guojingzhan
21 set sspwd=guojingzhan
22
23 rem 从VSS目录中获取最新的版本到编译目录下
24 ss get $/综合报送产品改造项目/编码目录/人行集中版/PBOCWeb -y%ssuser%,%sspwd% -I-Y -R -GL% GetToFolder% -O@%LogFile%codebuild.log
25 rem ###################################################
26
27 rem ###################################################
28 rem 步骤二:对最新的程序进行编译
29 rem 遍历设置DLL文件夹中文件为非只读
30 xcopy %GetToFolder%PBOCWeb\PBOC.Web\Dll %GetToFolder%PBOCWeb\PBOC.Web\Dll1\ /s /e /h
31 rmdir /s /q %GetToFolder%PBOCWeb\PBOC.Web\Dll\
32 xcopy %GetToFolder%PBOCWeb\PBOC.Web\Dll1 %GetToFolder%PBOCWeb\PBOC.Web\Dll\ /s /e /h
33 rmdir /s /q %GetToFolder%PBOCWeb\PBOC.Web\Dll1\
34
35 rem 版本号设定
36 version %CD%\version.txt
37
38 rem 程序编译
39 set path=D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\
40 devenv /rebuild debug %GetToFolder%PBOCWeb\PBOCWeb.sln /out %LogFile%compiler.log
41 rem ###################################################
42
43 rem ###################################################
44 rem 步骤三:进行版本的发布
45 rem 从编译文件夹复制到发布文件夹
46 setlocal enabledelayedexpansion
47 for /f %%i in (version.txt) do set var=!var!%%i
48 set filename=%var%
49 set Publisfolder=D:\JRTJ\BuildDaily\%filename%\
50 xcopy %GetToFolder:~0,-1% %Publisfolder% /s /e /h /y >%LogFile%xcopy.log
51
52 rem 设置发布路径
53 cscript iisvdir.vbs /create "默认网站" PBOC.Web_D_%filename% %Publisfolder%PBOCWeb\PBOC.Web
54
55 rem 修改文件的配置文件
56 replace D:\JRTJ\BuildDaily\%filename%\PBOCWeb\PBOC.Web\Config\PBOC.NEW.config D:\JRTJ\BuildDaily\%filename%\ %GetToFolder%
57 replace D:\JRTJ\BuildDaily\%filename%\PBOCWeb\PBOC.Web\web.config D:\JRTJ\BuildDaily\% filename%\ %GetToFolder%
58 rem ###################################################
59 cd\
60
61 if errorlevel 1 (
62 echo 导出失败
63 ) ELSE (
64 echo 导出完成
65 )
66 @echo on
4. 执行过程截图
4.1. 运行脚本
双击或者在命令行中调用main.bat批处理文件
4.2.1. 设置日志存放的地址
2 rem ###################################################
3 rem 设置日志存放的地址
4 set LogFile=D:\JRTJ\BuildLogOfAuto\%date:~0,4%%date:~5,2%%date:~8,2%\
5 md %LogFile%
设置日志存放地址根据当前日期生成20110811,具体路径为:D:\JRTJ\BuildLogOfAuto\20110811\,如果不存在则创建,否则提示“已经存在”
4.2.2. 删除编译文件夹下所有的文件
2 set GetToFolder=E:\VSS_DB_DJZ\综合报送产品改造项目\编码目录\人行集中版\PBOCWeb\
3 rmdir /s /q %GetToFolder%
4 md %GetToFolder%
删除VSS下载存放文件夹E:\VSS_DB_DJZ\综合报送产品改造项目\编码目录\人行集中版\PBOCWeb\PBOCWeb\并重新创建,目的在于能够每次编译能够获取全量版本
4.2.3. 进入VSS的执行目录,设置用户信息
2 set path=D:\Program Files\Microsoft Visual Studio\Common\VSS\win32
3 set ssdir=\\10.168.165.40\vss_db_djz
4 set ssuser=guojingzhan
5 set sspwd=guojingzhan
6
7 rem 从VSS目录中获取最新的版本到编译目录下
8 ss get $/综合报送产品改造项目/编码目录/人行集中版/PBOCWeb -y%ssuser%,%sspwd% -I-Y -R -GL% GetToFolder% -O@%LogFile%codebuild.log
设置VSS访问地址http://www.cnblogs.com/shishanyuan/admin/file://10.168.165.40/vss_db_djz并设置访问用户名、密码信息,调用SS命令全量版本,版本获取的日志生成放在D:\JRTJ\BuildLogOfAuto\20110810\ codebuild.log中
4.3. 步骤二编译程序
4.3.1. 遍历设置DLL文件夹中文件为非只读
2 rem 遍历设置DLL文件夹中文件为非只读
3 xcopy %GetToFolder%PBOCWeb\PBOC.Web\Dll %GetToFolder%PBOCWeb\PBOC.Web\Dll1\ /s /e /h
4 rmdir /s /q %GetToFolder%PBOCWeb\PBOC.Web\Dll\
5 xcopy %GetToFolder%PBOCWeb\PBOC.Web\Dll1 %GetToFolder%PBOCWeb\PBOC.Web\Dll\ /s /e /h
6 rmdir /s /q %GetToFolder%PBOCWeb\PBOC.Web\Dll1\
该步骤非必须,而且本产品需要设置该文件夹为可读进行
4.3.2. 版本号设定
2 version %CD%\version.txt
version.exe是调用VS.NET2003命令行编译而成的小程序,其功能是维护版本号。版本号由四部分组成:主版本号.子版本号.发布号.编译日期,该步骤对版本号V0.8.0232.0810中的发布号自动加1,编译日期为当前日期
4.3.3. 程序编译
2 set path=D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\
3 devenv /rebuild debug %GetToFolder%PBOCWeb\PBOCWeb.sln /out %LogFile%compiler.log
调用VS.NET 2003的编译工具进行编译,编译的日志生成放在D:\JRTJ\BuildLogOfAuto\20110811\compiler.log中,需要编译成功才可进行下步操作
4.4. 步骤三编译程序
4.4.1. 从编译文件夹复制到发布文件夹
2 rem 从编译文件夹复制到发布文件夹
3 setlocal enabledelayedexpansion
4 for /f %%i in (version.txt) do set var=!var!%%i
5 set filename=%var%
6 set Publisfolder=D:\JRTJ\BuildDaily\%filename%\
7 xcopy %GetToFolder:~0,-1% %Publisfolder% /s /e /h /y >%LogFile%xcopy.log
获取最新的版本号,把编译成功的程序文件复制到发布文件夹中,发布文件夹路径为D:\JRTJ\BuildDaily\V3.1.0028.0811,复制的日志放到D:\JRTJ\BuildLogOfAuto\20110811\xcopy.log中
4.4.2. 设置发布路径
2 cscript iisvdir.vbs /create "默认网站" PBOC.Web_D_%filename% %Publisfolder%PBOCWeb\PBOC.Web
通过iisvdir.vbs脚本发布程序,执行的结果显示了发布名称、根目录信息等。具体名称为PBOC.Web_D_V3.1.0028.0811,根目录为D:\JRTJ\BuildDaily\V3.1.0028.0811\PBOCWeb\PBOC.Web
4.4.3. 修改文件的配置文件
2 replace D:\JRTJ\BuildDaily\%filename%\PBOCWeb\PBOC.Web\Config\PBOC.NEW.config D:\JRTJ\BuildDaily\%filename%\ %GetToFolder%
3 replace D:\JRTJ\BuildDaily\%filename%\PBOCWeb\PBOC.Web\web.config D:\JRTJ\BuildDaily\% filename%\ %GetToFolder%
replace.exe是调用VS.NET2003命令行编译而成的小程序,其功能是对文本进行替换功能。在D:\JRTJ\BuildDaily\V3.1.0028.0811\PBOCWeb\PBOC.Web\Config\PBOC.NEW.config文件中进行参数替换
4.4.4. 执行结果
2 cd\
3
4 if errorlevel 1 (
5 echo 导出失败
6 ) ELSE (
7 echo 导出完成
8 )
9 @echo on
执行结果显示,如果成功则输出导出完成
4.5. 执行信息查看
4.5.1. 日志信息
4.5.2. 发布文件夹版本
4.5.3. IIS中发布程序