纯命令行实现.Net项目每日构建(升级版本)

 解持续集成
--纯命令行实现.Net项目每日构建(升级版本)

该工具源代码下载    

      在《纯命令行实现.Net项目每日构建》实现了完全自动化、可重复的构建工作,但随着时间的推移,新的问题暴露了:由于所在公司是一家 产品开发+现场实施 型的软件企业,十个人的研发团队并发支持四、五十个项目,每天除了完成客户个性化开发需求和沟通解决现场各种怪异问题之外,还要进行每日构建、版本发布(我们通常是一周对外发布一次版本,甚至临时版本)、甚至提供不同形式的源代码。在进度比较松的情况还能够勉强应付,但在进度较为紧张的时候,花较大精力去做这种事情,团队人员叫苦不迭。
     针对这种情况,我们对第一个构建版本进行了改造,加入了主界面,在界面上可以进行不同操作的选择,如下图所示:

该界面上可以选择不同操作,具体操作如下:
   0、退出:返回到命令行主程序
   1、生成DailyBuild每日版本发布用于测试回归:该选项包括获取源代码、编译及发布,作为BVT和每日测试回归版本,该操作频度一般为日频度;
   2、生成ReleaseBuild发布测试版本:该选项包括获取源代码、编译及发布,为BVT和每周版本发布版本,该操作频度一般为周频度;
   3、打包发布版本,包含帮助文件:打包指定版本程序包,包含帮助文件;
   4、打包发布版本,不包含帮助文件:打包指定版本程序包,不包含帮助文件;
   5、生成ReleaseBuild发布测试版本,并打包含帮助文件:在选项2基础上,打包程序包,并包含帮助文件;
   6、生成ReleaseBuild发布测试版本,并打包不含帮助文件:在选项2基础上,打包程序包,并不包含帮助文件;

 

演示说明:
由于选项1、2较为类似,将以选项1作为例子;选项3、4较为类型,将以选项4为实例;选项5、6较为类似,将以选项5为示例。


1. 准备工作
在D:\JRTJ目录下建立如下文件夹:

  • BuildDaily:用于存放构建版本
  • BuildRelease:
  • BuildLogOfAuto:用户存放构建日志
  • 自动编译脚本:存放每日构建脚本及辅助脚本

自动编译脚本相关脚本说明: 
  • attrib.exe:文件属性修改程序
  • cscript.exe:Win32控制台脚本宿主引擎
  • iisvdir.vbs:IIS6.0中用户创建虚拟目录脚本
  • main.bat:构建主程序
  • replace.exe:运行在Framework1.1下,用于替换关键字的执行程序
  • version.exe:运行在Framework1.1下,用于版本号设置,加入当前时间并且每次自增1
  • version.txt:用于记录当前版本号,具体格式参见构建流程中对版本号说明
  • xcopy.exe:复制文件使用执行程序

2. 脚本解读
其中main.bat构建脚本内容如下:

第一部分 
 1  @echo   off
 2  ::     程序打包、版本发布、备份程序
 3  ::     create&edit by jz_guo 2008-1-8 17:25 
 4  ::     在windwo2003、iis6.0、framework1.1环境下测试通过
 5  ::     功能:1、生成DailyBuild每日版本发布用于测试回归           菜单号 1
 6  ::           2、生成ReleaseBuild发布测试版本                 菜单号 2
 7  ::           3、打包发布版本,包含帮助文件                     菜单号 3
 8  ::           4、打包发布版本,不包含帮助文件                     菜单号 4        
 9  ::           5、生成ReleaseBuild发布测试版本,并打包含帮助文件    菜单号 5                        
10  ::           6、生成ReleaseBuild发布测试版本,并打包不含帮助文件  菜单号 6                
11 
12  mode  con lines = 26
13  title 进行程序打包、版本发布、备份程序
14  color 1f
15  cls
16 
17  set  strCurrent = % cd %
18 
19  ::  ----------------------检测外部是否输入为空后者是帮助信息--------------------
20  if   " %1% " == " /? "   goto  help                     :外部输入 / ?则出现DOS的帮助提示
21  if   " %1% " == " /h "   goto  help                     :同上,输入 /
22  if   " %1% " == " /H "   goto  help                     :同上,分别给出了大小写。
23 
24  :help
25  rem  ----------------------------图形化帮助提示----------------------------
26  echo .
27  echo    #########################################################################
28  echo    ##   向导    需要帮助请输入?或者h                                         ##
29  echo    ##    0 、退出                                            输入    0          ##
30  echo    ##    1 、生成DailyBuild每日版本发布用于测试回归             输入    1          ##
31  echo    ##    2 、生成ReleaseBuild 发布测试版本                    输入    2          ##
32  echo    ##    3 、打包发布版本 , 包含帮助文件                         输入    3          ##
33  echo    ##    4 、打包发布版本 , 不包含帮助文件                       输入    4          ##
34  echo    ##    5 、生成ReleaseBuild发布测试版本 , 并打包含帮助文件      输入    5          ##
35  echo    ##    6 、生成ReleaseBuild发布测试版本 , 并打包不含帮助文件    输入    6          ##
36  echo    #########################################################################
37  echo .
38 
39  rem  ----------------------------设置参数信息----------------------------
40  :begin
41  rem  ---------------------------------------------------------
42  rem  当前文件夹的路径
43  set  strBatCurrPath = D: \ JRTJ \ 自动编译脚本 \
44 
45  rem  设置日志存放的地址
46  set  LogFilePath = D: \ JRTJ \ BuildLogOfAuto \
47 
48  rem  大集中项目所在的路径
49  set  GetToFolder = E: \ VSS_DB_DJZ \ 综合报送产品改造项目 \ 编码目录 \ 人行集中版 \ PBOCWeb \
50 
51  rem  VSS相关的信息
52  set   path = D: \ Program  Files \ Microsoft Visual Studio \ Common \ VSS \ win32
53  set  ssdir =\\ 10.168 . 165.40 \ vss_db_djz
54  set  ssuser = guojingzhan
55  set  sspwd = guojingzhan
56  set  PathOfProjInVss =$/ 综合报送产品改造项目 / 编码目录 / 人行集中版 / PBOCWeb
57 
58  rem  编译程序所在的路径
59  set  DevelopPath = D: \ Program  Files \ Microsoft Visual Studio  . NET   2003 \ Common7 \ IDE \
60 
61  rem  保存文件所在的路径
62  set  TargetFolderPath_Daily = D: \ JRTJ \ BuildDaily \
63  set  TargetFolderPath_Release = D: \ JRTJ \ BuildRelease \
64 
65  rem  设置打包路径
66  set  TargetPath = C: \
67  rem  ---------------------------------------------------------

 

 

第二部分 
 1  rem  ----------------------------设置参数信息----------------------------
 2  :begin
 3  rem  ---------------------------------------------------------
 4  rem  当前文件夹的路径
 5  set  strBatCurrPath = D: \ JRTJ \ 自动编译脚本 \
 6 
 7  rem  设置日志存放的地址
 8  set  LogFilePath = D: \ JRTJ \ BuildLogOfAuto \
 9 
10  rem  大集中项目所在的路径
11  set  GetToFolder = E: \ VSS_DB_DJZ \ 综合报送产品改造项目 \ 编码目录 \ 人行集中版 \ PBOCWeb \
12 
13  rem  VSS相关的信息
14  set   path = D: \ Program  Files \ Microsoft Visual Studio \ Common \ VSS \ win32
15  set  ssdir =\\ 10.168 . 165.40 \ vss_db_djz
16  set  ssuser = guojingzhan
17  set  sspwd = guojingzhan
18  set  PathOfProjInVss =$/ 综合报送产品改造项目 / 编码目录 / 人行集中版 / PBOCWeb
19 
20  rem  编译程序所在的路径
21  set  DevelopPath = D: \ Program  Files \ Microsoft Visual Studio  . NET   2003 \ Common7 \ IDE \
22 
23  rem  保存文件所在的路径
24  set  TargetFolderPath_Daily = D: \ JRTJ \ BuildDaily \
25  set  TargetFolderPath_Release = D: \ JRTJ \ BuildRelease \
26 
27  rem  设置打包路径
28  set  TargetPath = C: \
29  rem  ---------------------------------------------------------

 

 

第三部分
 1  :CodeBuildContent
 2  rem  --------------------------------------------------------------------
 3  echo  步骤一 :从VSS获取最新的文件到编译文件夹下
 4  echo  设置日志存放的地址
 5  set  LogFile = %LogFilePath%% date :~ 0 , 4 %% date :~ 5 , 2 %% date :~ 8 , 2 % \
 6  md  %LogFile%
 7 
 8  echo  删除编译文件夹下所有的文件
 9  rmdir   / / q %GetToFolder%
10  md  %GetToFolder%
11 
12  echo  从VSS目录中获取最新的版本到编译目录下
13  ss get %PathOfProjInVss% -y%ssuser% , %sspwd% -I-Y -R -GL%GetToFolder% -O@%LogFile%codebuild . log
14 
15 
16  echo  步骤二 :对最新的程序进行编译
17  echo  遍历设置DLL文件夹中文件为非只读
18  cd   " %strBatCurrPath% "
19  xcopy   " %GetToFolder%PBOCWeb\PBOC.Web\Dll "   " %GetToFolder%PBOCWeb\PBOC.Web\Dll1\" /s /e /h
20  rmdir /s /q  " %GetToFolder%PBOCWeb \ PBOC . Web \ Dll \ "
21  xcopy  " %GetToFolder%PBOCWeb \ PBOC . Web \ Dll1 "   " %GetToFolder%PBOCWeb \ PBOC . Web \ Dll \ "  /s /e /h
22  rmdir /s /q  " %GetToFolder%PBOCWeb \ PBOC . Web \ Dll1 \ "
23 
24  echo 版本号的重新设定
25  version version.txt
26 
27  echo 程序编译
28  " %DevelopPath%devenv "  /rebuild debug  " %GetToFolder%PBOCWeb \ PBOCWeb . sln "  /out  " %LogFile%compiler . log "
29 
30  echo 步骤三:进行版本的发布
31  echo 从编译文件夹复制到发布文件夹
32  setlocal enabledelayedexpansion
33  set var=
34  for /f %%i in (version.txt) do set var=!var!%%i
35  set filename=%var%
36  set Publisfolder=%TargetFolderPath%%filename%\
37  cd  " %strBatCurrPath% "
38  xcopy  " %GetToFolder:~ 0 , - 1 % "   " %Publisfolder% "  /s /e /h /y > " %LogFile% xcopy . log "
39 
40  echo 发布应用
41  cscript iisvdir.vbs /create  " 默认网站 "   " PBOC . Web_D_%filename% "   " %Publisfolder%PBOCWeb \ PBOC . Web "
42 
43  echo 修改文件的配置文件
44  " %strBatCurrPath% replace "  %TargetFolderPath%%filename%\PBOCWeb\PBOC.Web\Config\PBOC.NEW.config %TargetFolderPath%%filename%\ %GetToFolder%
45  " %strBatCurrPath% replace "  %TargetFolderPath%%filename%\PBOCWeb\PBOC.Web\web.config %TargetFolderPath%%filename%\ %GetToFolder%
46 
47  set SourcePath=%TargetFolderPath%%filename%\PBOCWeb\PBOC.Web
48  if  " %source% " == " 5 "  goto Pack
49  if  " %source% " == " 6 "  goto Pack
50  goto begin
51  rem --------------------------------------------------------------------

 

 

第四部分
 1  rem  ----------------------------打包发布版本----------------------------
 2  :PackRelease_Source
 3  set  SourcePath = enter
 4  set   / p SourcePath = 请输入需要打包项目 ( PBOC . Web ) 路径:
 5  set   " SourcePath=%SourcePath: " = % "
 6  if  " %SourcePath% " == " enter "  goto RePackRelease_Source
 7  goto PackRelease_Target
 8 
 9  :RePackRelease_Source
10  set ReSourcePath=enter
11  set /p ReSourcePath=你输入的路径为空,请重新输入需要打包项目(PBOC.Web)路径:
12  set  " ReSourcePath = %ReSourcePath: " =% "
13  if   " %ReSourcePath% " == " enter "   goto  RePackRelease_Source
14  goto  PackRelease_Target
15 
16  :PackRelease_Target
17  set  TargetPath = enter
18  set   / p TargetPath = 请输入存放打包路径:
19  set   " TargetPath=%TargetPath: " = % "
20  if  " %SourcePath% " == " enter "  goto RePackRelease_Target
21  goto Pack
22 
23  :RePackRelease_Target
24  set ReTargetPath=enter
25  set /p ReTargetPath=你输入的路径为空,请重新输入请输入存放打包路径:
26  set  " ReTargetPath = %ReTargetPath: " =% "
27  if   " %ReTargetPath% " == " enter "   goto  RePackRelease_Target
28  goto  Pack
29 
30  :Pack
31  echo  步骤* :版本打包
32  echo  复制文件夹到临时目录
33  rmdir  %TargetPath%PBOC . Web
34  md  %TargetPath%PBOC . Web
35  " %strBatCurrPath%xcopy "   " %SourcePath% "   " %TargetPath%PBOC.Web "   / / / / y
36  set  delPath = %TargetPath%PBOC . Web \
37  if   " %source% " == " 3 "   goto  Del_IncludeHelp 
38  if   " %source% " == " 4 "   goto  Del_NoIncludeHelp
39  if   " %source% " == " 5 "   goto  Del_IncludeHelp 
40  if   " %source% " == " 6 "   goto  Del_NoIncludeHelp
41  echo  打包出现异常,请检查!
42  goto  begin
43 
44  :Del_IncludeHelp
45  echo  删除指定类型文件,压缩程序包
46  del   / / / f %delPath%Web . config
47  del   / / / f %delPath%* . cs %delPath%* . resx %delPath%* . pdb %delPath%* . scc %delPath%* . sln %delPath%* . vssscc %delPath%* . suo %delPath%* . vspscc %delPath%* . webinfo %delPath%* . csproj
48  rd   / / q %delPath%config %delPath%Data %delPath%fckeditor %delPath%MenuXML %delPath%OfficeModel %delPath%Services %delPath%webctrl_client 
49  " %strBatCurrPath%rar.exe "  -y a  " %TargetPath%PBOC.Web.rar "  %TargetPath%PBOC . Web
50  echo  打包成功
51  echo .
52  goto  begin
53 
54  :Del_NoIncludeHelp
55  echo  删除指定类型文件,压缩程序包
56  del   / / / f %delPath%Web . config
57  del   / / / f %delPath%* . cs %delPath%* . resx %delPath%* . pdb %delPath%* . scc %delPath%* . sln %delPath%* . vssscc %delPath%* . suo %delPath%* . vspscc %delPath%* . webinfo %delPath%* . csproj
58  rd   / / q %delPath%config %delPath%Data %delPath%fckeditor %delPath%MenuXML %delPath%OfficeModel %delPath%Services %delPath%webctrl_client 
59  del   / / / f %delPath%Pages \ SysManager \ SysHelp \ help . mht 
60  del   / / / f %delPath%Pages \ SysManager \ SysHelp \ 金融统计标准集中版帮助1 . 0 . chm
61  " %strBatCurrPath%\rar.exe "  -y a  " %TargetPath%PBOC.Web.rar "  %TargetPath%PBOC . Web
62  echo  打包成功
63  echo .
64  goto  begin
65 
66  rem  ----------------------------输入错误提示----------------------------
67  :warng
68  echo  您选择的操作有误,请重新输入!
69  echo .
70  goto  begin

 

 

3. 构建执行过程
3.1. 启动构建程序
双击或者在命令行中调用main.bat批处理主运行脚本

3.2. 生成DailyBuild每日版本发布用于测试回归(选项1)
3.2.1. 步骤一从VSS服务器获取最新版本
选择操作1回车,显示如下操作

  • 设置日志存放的地址
  • 删除编译文件夹下所有的文件
  • 从VSS获取最新的文件到编译文件夹下

3.2.2. 步骤二编译程序
从VSS获取最新版本后,进行如下操作:

  • 遍历设置DLL文件夹中文件为非只读(该步骤该项目个性化需要,不是必须)
  • 版本号的重新设定
  • 程序编译

3.2.3. 步骤三进行版本发布
编译通过以后,进行如下操作:
从编译文件夹复制到发布文件夹
发布应用
修改配置文件

3.2.4. 构建结果查看
日志信息
发布程序

IIS发布程序

3.3. 生成ReleaseBuild发布测试版本,并打包含(选项5)
该操作前三步骤与 3.2生成DailyBuild每日版本发布用于测试回归(选项1) 相同,只是在此之上增加了版本打包,如下图所示:

调用rar压缩文件进行压缩

在打包路径可以看到打包文件夹PBOC.Web和压缩包PBOC.Web.rar

3.4. 打包发布版本,不包含帮助文件(选项4)
通过选项4可以对任意版本继续打包,其中选项3包含帮助文件,4不包含帮助文件。选择选项4可以需要输入打包项目(PBOC.Web)的路径和输入存放打包路径,如下图所示:

4. 总结
通过该工具构建好处:
1、 减少了人力投入到这种重复、无味的工作中,执行构建命令后可以一边喝茶一边等待结果,也可以把宝贵的时间投入到产品开发中;
2、 降低了项目集成风险,通过每日构建能够在更短的时间内发现代码的冲突,减少了解决这种问题时间。
存在不足:
虽然该构建工具中实现了构建完全自动化,但不足的是未引入自动化测试工具,不能够自动获得有效报告和共享构建信息,在后面的文章中,我们将介绍一些工具实现。

 

出處http://www.cnblogs.com/shishanyuan/archive/2011/08/25/2153384.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值