图解持续集成--纯命令行实现.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构建脚本内容如下: 

View Code
 1  @echo   off  
 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   / / 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 \   / / / h
31  rmdir   / / q %GetToFolder%PBOCWeb \ PBOC . Web \ Dll \
32  xcopy  %GetToFolder%PBOCWeb \ PBOC . Web \ Dll1 %GetToFolder%PBOCWeb \ PBOC . Web \ Dll \   / / / h
33  rmdir   / / 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%  / / / / > %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. 步骤一从VSS服务器获取最新版本
4.2.1. 设置日志存放的地址

 

1  rem  步骤一:从VSS获取最新的文件到编译文件夹下
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. 删除编译文件夹下所有的文件

 

1  rem  删除编译文件夹下所有的文件
2  set  GetToFolder = E: \ VSS_DB_DJZ \ 综合报送产品改造项目 \ 编码目录 \ 人行集中版 \ PBOCWeb \
3  rmdir   / / q %GetToFolder%
4  md  %GetToFolder%

 删除VSS下载存放文件夹E:\VSS_DB_DJZ\综合报送产品改造项目\编码目录\人行集中版\PBOCWeb\PBOCWeb\并重新创建,目的在于能够每次编译能够获取全量版本
4.2.3. 进入VSS的执行目录,设置用户信息

 

1  rem  进入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文件夹中文件为非只读

 

1  rem  步骤二:对最新的程序进行编译
2  rem  遍历设置DLL文件夹中文件为非只读
3  xcopy  %GetToFolder%PBOCWeb \ PBOC . Web \ Dll %GetToFolder%PBOCWeb \ PBOC . Web \ Dll1 \   / / / h
4  rmdir   / / q %GetToFolder%PBOCWeb \ PBOC . Web \ Dll \
5  xcopy  %GetToFolder%PBOCWeb \ PBOC . Web \ Dll1 %GetToFolder%PBOCWeb \ PBOC . Web \ Dll \   / / / h
6  rmdir   / / q %GetToFolder%PBOCWeb \ PBOC . Web \ Dll1 \

该步骤非必须,而且本产品需要设置该文件夹为可读进行
4.3.2. 版本号设定

 

1  rem  版本号设定
2  version % CD % \ version . txt

version.exe是调用VS.NET2003命令行编译而成的小程序,其功能是维护版本号。版本号由四部分组成:主版本号.子版本号.发布号.编译日期,该步骤对版本号V0.8.0232.0810中的发布号自动加1,编译日期为当前日期
4.3.3. 程序编译

 

1  rem  程序编译
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. 从编译文件夹复制到发布文件夹

 

1  rem  步骤三:进行版本的发布
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%  / / / / > %LogFile% xcopy . log

获取最新的版本号,把编译成功的程序文件复制到发布文件夹中,发布文件夹路径为D:\JRTJ\BuildDaily\V3.1.0028.0811,复制的日志放到D:\JRTJ\BuildLogOfAuto\20110811\xcopy.log中
4.4.2. 设置发布路径

 

1  rem  设置发布路径
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. 修改文件的配置文件

 

1  rem  修改文件的配置文件
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. 执行结果

 

1  rem  ###################################################
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中发布程序

 

 出處http://www.cnblogs.com/shishanyuan/archive/2011/08/11/2135107.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值