该脚本工具是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
/
s
/
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
\
/
s
/
e
/
h
31
rmdir
/
s
/
q %GetToFolder%PBOCWeb
\
PBOC
.
Web
\
Dll
\
32
xcopy
%GetToFolder%PBOCWeb
\
PBOC
.
Web
\
Dll1 %GetToFolder%PBOCWeb
\
PBOC
.
Web
\
Dll
\
/
s
/
e
/
h
33
rmdir
/
s
/
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%
/
s
/
e
/
h
/
y
>
%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
/
s
/
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
\
/
s
/
e
/
h
4
rmdir
/
s
/
q %GetToFolder%PBOCWeb
\
PBOC
.
Web
\
Dll
\
5
xcopy
%GetToFolder%PBOCWeb
\
PBOC
.
Web
\
Dll1 %GetToFolder%PBOCWeb
\
PBOC
.
Web
\
Dll
\
/
s
/
e
/
h
6
rmdir
/
s
/
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%
/
s
/
e
/
h
/
y
>
%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中发布程序
