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

本文介绍了一种在软件开发企业中实现自动化构建流程的工具,通过命令行界面提供每日构建、版本发布等功能,有效减少人力投入,降低集成风险,并支持不同频率的构建任务。同时,详细阐述了构建过程的自动化执行方式,包括从版本控制服务器获取代码、编译、发布等关键步骤,以及如何通过图形界面简化操作流程,提高团队成员的工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

第一部分 
 
@echo off
::    程序打包、版本发布、备份程序
::    create&edit by jz_guo 2008-1-8 17:25 
::    在windwo2003、iis6.0、framework1.1环境下测试通过
::    功能:1、生成DailyBuild每日版本发布用于测试回归           菜单号 1
::          2、生成ReleaseBuild发布测试版本                 菜单号 2
::          3、打包发布版本,包含帮助文件                     菜单号 3
::          4、打包发布版本,不包含帮助文件                     菜单号 4        
::          5、生成ReleaseBuild发布测试版本,并打包含帮助文件    菜单号 5                        
::          6、生成ReleaseBuild发布测试版本,并打包不含帮助文件  菜单号 6                

mode con lines=26
title 进行程序打包、版本发布、备份程序
color 1f
cls

set strCurrent=%cd%

:: ----------------------检测外部是否输入为空后者是帮助信息--------------------
if "%1%"=="/?" goto help                     :外部输入/?则出现DOS的帮助提示
if "%1%"=="/h" goto help                     :同上,输入/h 
if "%1%"=="/H" goto help                     :同上,分别给出了大小写。

:help
rem ----------------------------图形化帮助提示----------------------------
echo.
echo  #########################################################################
echo  ##  向导    需要帮助请输入?或者h                                         ##
echo  ##  0、退出                                            输入   0        ##
echo  ##  1、生成DailyBuild每日版本发布用于测试回归             输入   1        ##
echo  ##  2、生成ReleaseBuild 发布测试版本                    输入   2        ##
echo  ##  3、打包发布版本,包含帮助文件                         输入   3        ##
echo  ##  4、打包发布版本,不包含帮助文件                       输入   4        ##
echo  ##  5、生成ReleaseBuild发布测试版本,并打包含帮助文件      输入   5        ##
echo  ##  6、生成ReleaseBuild发布测试版本,并打包不含帮助文件    输入   6        ##
echo  #########################################################################
echo.

rem ----------------------------设置参数信息----------------------------
:begin
rem ---------------------------------------------------------
rem 当前文件夹的路径
set strBatCurrPath=D:\JRTJ\自动编译脚本\

rem 设置日志存放的地址
set LogFilePath=D:\JRTJ\BuildLogOfAuto\

rem 大集中项目所在的路径
set GetToFolder=E:\VSS_DB_DJZ\综合报送产品改造项目\编码目录\人行集中版\PBOCWeb\

rem VSS相关的信息
set path=D:\Program Files\Microsoft Visual Studio\Common\VSS\win32
set ssdir=\\10.168.165.40\vss_db_djz
set ssuser=guojingzhan
set sspwd=guojingzhan
set PathOfProjInVss=$/综合报送产品改造项目/编码目录/人行集中版/PBOCWeb

rem 编译程序所在的路径
set DevelopPath=D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\

rem 保存文件所在的路径
set TargetFolderPath_Daily=D:\JRTJ\BuildDaily\
set TargetFolderPath_Release=D:\JRTJ\BuildRelease\

rem 设置打包路径
set TargetPath=C:\
rem ---------------------------------------------------------
第二部分 
 
rem ----------------------------设置参数信息----------------------------
:begin
rem ---------------------------------------------------------
rem 当前文件夹的路径
set strBatCurrPath=D:\JRTJ\自动编译脚本\

rem 设置日志存放的地址
set LogFilePath=D:\JRTJ\BuildLogOfAuto\

rem 大集中项目所在的路径
set GetToFolder=E:\VSS_DB_DJZ\综合报送产品改造项目\编码目录\人行集中版\PBOCWeb\

rem VSS相关的信息
set path=D:\Program Files\Microsoft Visual Studio\Common\VSS\win32
set ssdir=\\10.168.165.40\vss_db_djz
set ssuser=guojingzhan
set sspwd=guojingzhan
set PathOfProjInVss=$/综合报送产品改造项目/编码目录/人行集中版/PBOCWeb

rem 编译程序所在的路径
set DevelopPath=D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\

rem 保存文件所在的路径
set TargetFolderPath_Daily=D:\JRTJ\BuildDaily\
set TargetFolderPath_Release=D:\JRTJ\BuildRelease\

rem 设置打包路径
set TargetPath=C:\
rem ---------------------------------------------------------

  第三部分
 
 :CodeBuildContent
 rem --------------------------------------------------------------------
 echo 步骤一:从VSS获取最新的文件到编译文件夹下
 echo 设置日志存放的地址
 set LogFile=%LogFilePath%%date:~0,4%%date:~5,2%%date:~8,2%\
 md %LogFile%
 
 echo 删除编译文件夹下所有的文件
 rmdir /s /q %GetToFolder%
 md %GetToFolder%
 
 echo 从VSS目录中获取最新的版本到编译目录下
 ss get %PathOfProjInVss% -y%ssuser%,%sspwd% -I-Y -R -GL%GetToFolder% -O@%LogFile%codebuild.log
 
 
 echo 步骤二:对最新的程序进行编译
 echo 遍历设置DLL文件夹中文件为非只读
 cd "%strBatCurrPath%"
 xcopy "%GetToFolder%PBOCWeb\PBOC.Web\Dll" "%GetToFolder%PBOCWeb\PBOC.Web\Dll1\" /s /e /h
 rmdir /s /q "%GetToFolder%PBOCWeb\PBOC.Web\Dll\"
 xcopy "%GetToFolder%PBOCWeb\PBOC.Web\Dll1" "%GetToFolder%PBOCWeb\PBOC.Web\Dll\" /s /e /h
 rmdir /s /q "%GetToFolder%PBOCWeb\PBOC.Web\Dll1\"
 
 echo 版本号的重新设定
 version version.txt
 
 echo 程序编译
 "%DevelopPath%devenv" /rebuild debug "%GetToFolder%PBOCWeb\PBOCWeb.sln" /out "%LogFile%compiler.log"
 
 echo 步骤三:进行版本的发布
 echo 从编译文件夹复制到发布文件夹
 setlocal enabledelayedexpansion
 set var=
 for /f %%i in (version.txt) do set var=!var!%%i
 set filename=%var%
 set Publisfolder=%TargetFolderPath%%filename%\
 cd "%strBatCurrPath%"
 xcopy "%GetToFolder:~0,-1%" "%Publisfolder%" /s /e /h /y >"%LogFile%xcopy.log"
 
 echo 发布应用
 cscript iisvdir.vbs /create "默认网站" "PBOC.Web_D_%filename%" "%Publisfolder%PBOCWeb\PBOC.Web"
 
 echo 修改文件的配置文件
 "%strBatCurrPath%replace" %TargetFolderPath%%filename%\PBOCWeb\PBOC.Web\Config\PBOC.NEW.config %TargetFolderPath%%filename%\ %GetToFolder%
 "%strBatCurrPath%replace" %TargetFolderPath%%filename%\PBOCWeb\PBOC.Web\web.config %TargetFolderPath%%filename%\ %GetToFolder%
 
 set SourcePath=%TargetFolderPath%%filename%\PBOCWeb\PBOC.Web
 if "%source%"=="5" goto Pack
 if "%source%"=="6" goto Pack
 goto begin
 rem --------------------------------------------------------------------

  第四部分
rem ----------------------------打包发布版本----------------------------
 :PackRelease_Source
 set SourcePath=enter
 set /p SourcePath=请输入需要打包项目(PBOC.Web)路径:
 set "SourcePath=%SourcePath:"=%"
 if "%SourcePath%"=="enter" goto RePackRelease_Source
 goto PackRelease_Target
 
 :RePackRelease_Source
 set ReSourcePath=enter
 set /p ReSourcePath=你输入的路径为空,请重新输入需要打包项目(PBOC.Web)路径:
 set "ReSourcePath=%ReSourcePath:"=%"
 if "%ReSourcePath%"=="enter" goto RePackRelease_Source
 goto PackRelease_Target
 
 :PackRelease_Target
 set TargetPath=enter
 set /p TargetPath=请输入存放打包路径:
 set "TargetPath=%TargetPath:"=%"
 if "%SourcePath%"=="enter" goto RePackRelease_Target
 goto Pack
 
 :RePackRelease_Target
 set ReTargetPath=enter
 set /p ReTargetPath=你输入的路径为空,请重新输入请输入存放打包路径:
 set "ReTargetPath=%ReTargetPath:"=%"
 if "%ReTargetPath%"=="enter" goto RePackRelease_Target
 goto Pack
 
 :Pack
 echo 步骤*:版本打包
 echo 复制文件夹到临时目录
 rmdir %TargetPath%PBOC.Web
 md %TargetPath%PBOC.Web
 "%strBatCurrPath%xcopy" "%SourcePath%" "%TargetPath%PBOC.Web" /s /e /h /y
 set delPath=%TargetPath%PBOC.Web\
 if "%source%"=="3" goto Del_IncludeHelp 
 if "%source%"=="4" goto Del_NoIncludeHelp
 if "%source%"=="5" goto Del_IncludeHelp 
 if "%source%"=="6" goto Del_NoIncludeHelp
 echo 打包出现异常,请检查!
 goto begin
 
 :Del_IncludeHelp
 echo 删除指定类型文件,压缩程序包
 del /s /q /f %delPath%Web.config
 del /s /q /f %delPath%*.cs %delPath%*.resx %delPath%*.pdb %delPath%*.scc %delPath%*.sln %delPath%*.vssscc %delPath%*.suo %delPath%*.vspscc %delPath%*.webinfo %delPath%*.csproj
 rd /s /q %delPath%config %delPath%Data %delPath%fckeditor %delPath%MenuXML %delPath%OfficeModel %delPath%Services %delPath%webctrl_client 
 "%strBatCurrPath%rar.exe" -y a "%TargetPath%PBOC.Web.rar" %TargetPath%PBOC.Web
 echo 打包成功
 echo.
 goto begin
 
 :Del_NoIncludeHelp
 echo 删除指定类型文件,压缩程序包
 del /s /q /f %delPath%Web.config
 del /s /q /f %delPath%*.cs %delPath%*.resx %delPath%*.pdb %delPath%*.scc %delPath%*.sln %delPath%*.vssscc %delPath%*.suo %delPath%*.vspscc %delPath%*.webinfo %delPath%*.csproj
 rd /s /q %delPath%config %delPath%Data %delPath%fckeditor %delPath%MenuXML %delPath%OfficeModel %delPath%Services %delPath%webctrl_client 
 del /s /q /f %delPath%Pages\SysManager\SysHelp\help.mht 
 del /s /q /f %delPath%Pages\SysManager\SysHelp\金融统计标准集中版帮助1.0.chm
 "%strBatCurrPath%\rar.exe" -y a "%TargetPath%PBOC.Web.rar" %TargetPath%PBOC.Web
 echo 打包成功
 echo.
 goto begin
 
 rem ----------------------------输入错误提示----------------------------
 :warng
 echo 您选择的操作有误,请重新输入!
 echo.
 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、 降低了项目集成风险,通过每日构建能够在更短的时间内发现代码的冲突,减少了解决这种问题时间。
存在不足:
虽然该构建工具中实现了构建完全自动化,但不足的是未引入自动化测试工具,不能够自动获得有效报告和共享构建信息,在后面的文章中,我们将介绍一些工具实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值