• 图解持续集成纯命令行实现.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、 降低了项目集成风险,通过每日构建能够在更短的时间内发现代码的冲突,减少了解决这种问题时间。
    存在不足:
    虽然该构建工具中实现了构建完全自动化,但不足的是未引入自动化测试工具,不能够自动获得有效报告和共享构建信息,在后面的文章中,我们将介绍一些工具实现。

     

  • 相关阅读:
    tomcat中如何处理http协议的属性Connection和Tansfer-Encoding
    Tomcat中特殊字符串过滤
    Tomcat源码解析系列(十一)ProtocolHandler
    Tomcat配置强制https端口变成8443的解决办法
    深入理解Tomcat(十)Connector
    web应用程序中解决Request和Response只能获取一次的问题
    CocosCreator之打包android
    如何通过配置tomcat或是web.xml让ie直接下载文件
    从安装PHP到第一个tomcat执行的hello world其实没那么难
    Tomcat安装、配置和部署笔记
  • 原文地址:https://www.cnblogs.com/shishanyuan/p/2153384.html
Copyright © 2020-2023  润新知