zoukankan      html  css  js  c++  java
  • 图解持续集成纯命令行实现.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中发布程序

  • 相关阅读:
    js面向对象和PHP面相对象
    git
    css3动画、2D与3D效果
    渲染数据方式
    ajax
    面向对象
    Date 日期
    Math 数值对象
    What is CGLib and JDK动态代理
    IDEA中lock对象不提示newCondition();
  • 原文地址:https://www.cnblogs.com/shishanyuan/p/2135107.html
Copyright © 2011-2022 走看看