圖解持續集成--純命令行實現.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章