才从书上看到CruiseControl.Net,这就是我要的。日常工作中常做这个事,从svn下载源码,开Visual Studio,编译,运行测试。这个工具可以自动完成这一系列工作。还能生成报表,监视svn的改动等。
MSBuild在这个位置:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
MSTest在这个位置:D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\mstest.exe(视安装路径)
这两个工具是.net自带的,在msdn里有详细说明。
SVN,现在是1.5了。
主要还是CruiseControl.Net的配置。
一、下载CruiseControl.Net,我用的是zip版,解压到安装目录。内有4个文件夹:
cctray:托盘程序,监视当前服务的运行结果
examples:一些示例的配置文件
server:服务程序
webdashboard:web版的监视程序,可查看服务的状态,及历史运行结果。
监视用的是remote,数据用xml+xsl展示。
二、配置ccnet.config
我配置后的结果:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
行2 project:CCNet可以监视多个项目,每个项目配置一份project;
行4 sourcecontrol:源码控制,这里用svn。还有其它十多种可以选择。配置好svn源,工作区。用远程时还需要用户密码。
行8 tasks:本项目要运行的任务
行42 publishers:默认这样子先
行45 triggers:触发条件。当前是30秒运行一次。当buildCondition="ForceBuild"时,每次编译,它的默认值是IfModificationExists,表示有代码改动时编译。
三、重点是task内的配置
msbuild节:
executable:程序位置
workingDirectory:工作位置
projectFile:项目文件
logger:编译信息的记录员
targets:msbuild的动作
buildArgs:编译参数
exec节:
exec可以运行任何命令行的程序。
这里用它来做文件删除,运行mstest。
merge节:
把mstest运行后的结果xml文件,合并到本次运行的结果文件中。这样在webdashboard中就可以看到mstest的结果了。