在上一篇
项目管理实践二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】中我们已经讲解了如何使用TortoiseSVN和VisualSVN Server来做简单的版本控制,这一篇我们将会讲解使用CruiseControl.NET和MSBuild来搭建每日构建系统。
在第一篇
项目管理实践一、工欲善其事,必先利其器 中我们已经安装了CruiseControl.NET 1.4,因为我们还要用到MSBuild,所以如果你的系统没有安装Visual Studio,那么你需要首先安装Visual Studio 2005/2008,我们在这里使用的是Visual Studio 2008,准备好这些了吗?OK,我们正式开始今天的课程!
首先,我们要配置CruiseControl.NET【下面简写为CCNET】,配置完成后,我们每次提交源代码到SVN服务器后,CCNET就可以自动从SVN服务器上签出源代码,并调用MSBuild自动进行编译。我们以昨天的教程中创建的StartKit项目为实例,先看看下面的配置文件:
CCNET配置文件代码
1
<
cruisecontrol
xmlns:cb
="urn:ccnet.config.builder"
>
2 <!-- 项目名称 -->
3 < name > StartKit </ name >
4 <!-- 标示类型,有多种类型。下面为默认标示,作为每次编译时生成的日志文件的名称 -->
5 < labeller type ="defaultlabeller" >
6 <!-- 前缀 -->
7 < prefix > StartKit-1- </ prefix >
8 <!-- 编译失败时是否增加 -->
9 < incrementOnFailure > false </ incrementOnFailure >
10 <!-- 格式 -->
11 < labelFormat > 00000 </ labelFormat >
12 </ labeller >
13 <!-- 项目的WebDashboard地址,CruiseControl.NET包括二部分,一是Server用来配置项目和监视文件修改,二是WebDashboard,是一个显示项目信息及编译信息的Website -->
14 < webURL > http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx </ webURL >
15 <!-- 触发器,包含多种,有兴趣可以查看官方文档 -->
16 < triggers >
17 <!-- 时间间隔触发器,下面是60秒触发一次 -->
18 < intervalTrigger seconds ="60" />
19 </ triggers >
20 <!-- 如果发现修改,延迟多久开始编译,下面是2秒 -->
21 < modificationDelaySeconds > 2 </ modificationDelaySeconds >
22 <!-- 源代码控制系统,支持多种,有兴趣可以查看官方文档,下面采用svn -->
23 < sourcecontrol type ="svn" >
24 <!-- 源代码在SVN服务器上的路径 -->
25 < trunkUrl > http://zt.net.henu.edu.cn/svn/StartKit/StartKit/ </ trunkUrl >
26 <!-- svn服务器所在路径,在这里就是VisualSVN Server安装目录中的bin目录下的svn.exe -->
27 < executable > C:/Program Files/VisualSVN Server/bin/svn.exe </ executable >
28 <!-- 用来迁出源代码的用户名,svn服务器进行验证 -->
29 < username > starter </ username >
30 <!-- 用来迁出源代码的用户名对应的密码 -->
31 < password > 123456 </ password >
32 <!-- web获取源代码的地址,类似于开源网站上浏览代码的那部分功能,这里的类型是trac -->
33 <!-- <webUrlBuilder type="trac">
34 <!--trac中对应项目的地址¬ -->
35 < tracProjectUrl > http://svn.net.henu.edu.cn/pojects/StartKit/ </ tracProjectUrl >
36 <!-- trac中对应项目的源代码库地址,相对于上面的路径 -->
37 < tracRepositoryRoot > /StartKit </ tracRepositoryRoot >
38 </ webUrlBuilder > -->
39 </ sourcecontrol >
40 <!-- 该节点用来配置具体执行那些任务 -->
41 < tasks >
42 <!-- msbuild任务配置,用来编译项目 -->
43 < msbuild >
44 <!-- MSBuild.exe的路径 -->
45 < executable > C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe </ executable >
46 <!-- 从SVN迁出的源代码的存放位置,可以不配置,下面的即为默认值 -->
47 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
48 < workingDirectory > D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </ workingDirectory >
49 <!-- 对这个项目的监控过程的日志记录目录,可以不配置,下面的即为默认值 -->
50 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
51 < artifactDirectory > D:\Program Files\CruiseControl.NET\server\StartKit\ Artifacts </ artifactDirectory >
52 <!-- 要编译的项目名称 -->
53 < projectFile > StartKit.sln </ projectFile >
54 <!-- MSBuild编译时的参数,具体参数信息可以查看MSDN上的说明 -->
55 < buildArgs > /p:configuration=debug </ buildArgs >
56 <!-- 指定日志记录模块 -->
57 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
58 < logger > ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll </ logger >
59 <!-- 编译目标 -->
60 < targets />
61 </ msbuild >
62 <!-- 在这里还可以添加其他的程序,比如运行测试、部署项目等等 -->
63 </ tasks >
64 <!-- 项目编译状态信息的保存位置 -->
65 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
66 < state type ="state" directory ="D:\Program Files\CruiseControl.NET\server\CCState" />
67 <!-- 发布和部署配置 -->
68 < publishers >
69 <!-- 如果编译成功,那么下面的配置,会将源代码复制到指定目录HistoryVersion下,名称为版本标识(自动增长,labeller配置)的子目录下 -->
70 < buildpublisher >
71 <!-- 源代码路径 -->
72 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
73 < sourceDir > D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </ sourceDir >
74 <!-- 编译成功后保存源代码到该目录下名称为版本标示labeller的目录中 -->
75 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
76 < publishDir > D:\Program Files\CruiseControl.NET\server\StartKit\HistoryVersion </ publishDir >
77 </ buildpublisher >
78 <!-- 该节点用来配置合并多个文件,当时有外部插件时,要把他们分别产生的输出文件合并 -->
79 < merge >
80 <!-- 要合并的文件,合并后的信息可以显示在Web Dashboard和邮件通知里 -->
81 < files >
82 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
83 < file > D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory\results.xml </ file >
84 </ files >
85 </ merge >
86 <!-- 源代码路径 -->
87 < xmllogger />
88 <!-- 显示历史修改记录列表, 在Web Dashboard中可以查看 -->
89 < modificationHistory />
90 <!-- 所有编译信息的统计, 在Web Dashboard中可以查看 -->
91 < statistics />
92 <!-- 邮件通知配置,每次编译后,都会邮件通知下面配置中添加的用户 -->
93 <!-- mailhost是发送邮件的主机,mailport是邮件发送端口,mailhostUsername发送邮件的邮箱用户名,mailhostPassword发送邮件的邮箱密码,from希望显示在发件人中的邮箱地址, includeDetails邮件内容是否包含详细的编译信息 -->
94 < email mailhost ="smtp.qq.com" mailport ="25"
95 mailhostUsername ="******" mailhostPassword ="******" from ="******@qq.com" includeDetails ="true" >
96 <!-- 接收邮件通知的用户 -->
97 < users >
98 <!-- name是SVN服务器上存在的用户名,group是SVN服务器上存在的组,address是该用户的邮箱地址 -->
99 < user name ="zt" group ="StartKit" address ="******1@qq.com" />
100 < user name ="***" group ="StartKit" address ="******2@qq.com" />
101 < user name ="***" group ="StartKit" address ="******3@qq.com" />
102 </ users >
103 <!-- 接收邮件通知的组 -->
104 < groups >
105 <!-- name必须是SVN服务器上存在的组,notification是什么时候发送通知,可选有Always/Success/Change/Fixed/Failed -->
2 <!-- 项目名称 -->
3 < name > StartKit </ name >
4 <!-- 标示类型,有多种类型。下面为默认标示,作为每次编译时生成的日志文件的名称 -->
5 < labeller type ="defaultlabeller" >
6 <!-- 前缀 -->
7 < prefix > StartKit-1- </ prefix >
8 <!-- 编译失败时是否增加 -->
9 < incrementOnFailure > false </ incrementOnFailure >
10 <!-- 格式 -->
11 < labelFormat > 00000 </ labelFormat >
12 </ labeller >
13 <!-- 项目的WebDashboard地址,CruiseControl.NET包括二部分,一是Server用来配置项目和监视文件修改,二是WebDashboard,是一个显示项目信息及编译信息的Website -->
14 < webURL > http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx </ webURL >
15 <!-- 触发器,包含多种,有兴趣可以查看官方文档 -->
16 < triggers >
17 <!-- 时间间隔触发器,下面是60秒触发一次 -->
18 < intervalTrigger seconds ="60" />
19 </ triggers >
20 <!-- 如果发现修改,延迟多久开始编译,下面是2秒 -->
21 < modificationDelaySeconds > 2 </ modificationDelaySeconds >
22 <!-- 源代码控制系统,支持多种,有兴趣可以查看官方文档,下面采用svn -->
23 < sourcecontrol type ="svn" >
24 <!-- 源代码在SVN服务器上的路径 -->
25 < trunkUrl > http://zt.net.henu.edu.cn/svn/StartKit/StartKit/ </ trunkUrl >
26 <!-- svn服务器所在路径,在这里就是VisualSVN Server安装目录中的bin目录下的svn.exe -->
27 < executable > C:/Program Files/VisualSVN Server/bin/svn.exe </ executable >
28 <!-- 用来迁出源代码的用户名,svn服务器进行验证 -->
29 < username > starter </ username >
30 <!-- 用来迁出源代码的用户名对应的密码 -->
31 < password > 123456 </ password >
32 <!-- web获取源代码的地址,类似于开源网站上浏览代码的那部分功能,这里的类型是trac -->
33 <!-- <webUrlBuilder type="trac">
34 <!--trac中对应项目的地址¬ -->
35 < tracProjectUrl > http://svn.net.henu.edu.cn/pojects/StartKit/ </ tracProjectUrl >
36 <!-- trac中对应项目的源代码库地址,相对于上面的路径 -->
37 < tracRepositoryRoot > /StartKit </ tracRepositoryRoot >
38 </ webUrlBuilder > -->
39 </ sourcecontrol >
40 <!-- 该节点用来配置具体执行那些任务 -->
41 < tasks >
42 <!-- msbuild任务配置,用来编译项目 -->
43 < msbuild >
44 <!-- MSBuild.exe的路径 -->
45 < executable > C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe </ executable >
46 <!-- 从SVN迁出的源代码的存放位置,可以不配置,下面的即为默认值 -->
47 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
48 < workingDirectory > D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </ workingDirectory >
49 <!-- 对这个项目的监控过程的日志记录目录,可以不配置,下面的即为默认值 -->
50 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
51 < artifactDirectory > D:\Program Files\CruiseControl.NET\server\StartKit\ Artifacts </ artifactDirectory >
52 <!-- 要编译的项目名称 -->
53 < projectFile > StartKit.sln </ projectFile >
54 <!-- MSBuild编译时的参数,具体参数信息可以查看MSDN上的说明 -->
55 < buildArgs > /p:configuration=debug </ buildArgs >
56 <!-- 指定日志记录模块 -->
57 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
58 < logger > ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll </ logger >
59 <!-- 编译目标 -->
60 < targets />
61 </ msbuild >
62 <!-- 在这里还可以添加其他的程序,比如运行测试、部署项目等等 -->
63 </ tasks >
64 <!-- 项目编译状态信息的保存位置 -->
65 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
66 < state type ="state" directory ="D:\Program Files\CruiseControl.NET\server\CCState" />
67 <!-- 发布和部署配置 -->
68 < publishers >
69 <!-- 如果编译成功,那么下面的配置,会将源代码复制到指定目录HistoryVersion下,名称为版本标识(自动增长,labeller配置)的子目录下 -->
70 < buildpublisher >
71 <!-- 源代码路径 -->
72 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
73 < sourceDir > D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </ sourceDir >
74 <!-- 编译成功后保存源代码到该目录下名称为版本标示labeller的目录中 -->
75 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
76 < publishDir > D:\Program Files\CruiseControl.NET\server\StartKit\HistoryVersion </ publishDir >
77 </ buildpublisher >
78 <!-- 该节点用来配置合并多个文件,当时有外部插件时,要把他们分别产生的输出文件合并 -->
79 < merge >
80 <!-- 要合并的文件,合并后的信息可以显示在Web Dashboard和邮件通知里 -->
81 < files >
82 <!-- 我这里的CruiseControl.NET 安装在D盘,你们使用时候,改成自己的安装路径即可 -->
83 < file > D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory\results.xml </ file >
84 </ files >
85 </ merge >
86 <!-- 源代码路径 -->
87 < xmllogger />
88 <!-- 显示历史修改记录列表, 在Web Dashboard中可以查看 -->
89 < modificationHistory />
90 <!-- 所有编译信息的统计, 在Web Dashboard中可以查看 -->
91 < statistics />
92 <!-- 邮件通知配置,每次编译后,都会邮件通知下面配置中添加的用户 -->
93 <!-- mailhost是发送邮件的主机,mailport是邮件发送端口,mailhostUsername发送邮件的邮箱用户名,mailhostPassword发送邮件的邮箱密码,from希望显示在发件人中的邮箱地址, includeDetails邮件内容是否包含详细的编译信息 -->
94 < email mailhost ="smtp.qq.com" mailport ="25"
95 mailhostUsername ="******" mailhostPassword ="******" from ="******@qq.com" includeDetails ="true" >
96 <!-- 接收邮件通知的用户 -->
97 < users >
98 <!-- name是SVN服务器上存在的用户名,group是SVN服务器上存在的组,address是该用户的邮箱地址 -->
99 < user name ="zt" group ="StartKit" address ="******1@qq.com" />
100 < user name ="***" group ="StartKit" address ="******2@qq.com" />
101 < user name ="***" group ="StartKit" address ="******3@qq.com" />
102 </ users >
103 <!-- 接收邮件通知的组 -->
104 < groups >
105 <!-- name必须是SVN服务器上存在的组,notification是什么时候发送通知,可选有Always/Success/Change/Fixed/Failed -->
106 <group name="StartKit " notification="always" />
107 </groups>
108 </email>
109 </publishers>
110 </project>
111 <!--可以同时添加多个项目
112 <project >
113 <name>test</name>
114 ……
115 </project>
116 -->
117 </cruisecontrol>
108 </email>
109 </publishers>
110 </project>
111 <!--可以同时添加多个项目
112 <project >
113 <name>test</name>
114 ……
115 </project>
116 -->
117 </cruisecontrol>
好了,我们已经对CCNET的配置文件有了大致的了解,接下来,你打开CCNET的安装路径,找到子目录server下的ccnet.config文件,把上面的配置信息Copy到ccnet.config文件中,记得把配置文件中的一些路径修改为自己的实际路径啊,修改好后,保存。这时候,检查Windows服务CruiseControl.NET Server是否启动,如果没有则启动它,启动该服务后,打开浏览在地址栏输入上面配置文件中的webUrl地址:
http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx 也可以直接输入
http://202.196.96.55:8080/server/ ,这里是演示地址,要根据自己的实际情况修改为正确的地址,OK,看到类似下图的效果,好了,搞定!如果你遇到了什么麻烦,请在下面留言,我一定会及时回复!
![](/cnblogs_com/ttzhang/110608_1807_D1.png)
点击StartKit,转入下图所示的页面:
![](/cnblogs_com/ttzhang/110608_1807_D2.png)
OK,到这里,我们提交更新到SVN服务器后,CCNET就会根据我们配置自动编译项目,而且我们也可以通过Web Dashboard来查看具体的编译信息了,提示如果配置了邮件发送,那么我们还可以通过邮件收到详细的编译信息,怎么样?够方便吧!
其实,CCNET的功能是相当强大的,上面只是最常用的配置,其他还有很多非常好的功能。你想知道吗?那你可以在这里查看 CCNET官方文档 ,实际上,你安装CCNET后,文档也已经安装到你的电脑了,在CCNET的安装目录下的webdashboard的子目录doc中就是。
下面我简单讲一下,如何使用CruiseControl.NET Tray【以下简称CCTray】来监视每次提交后的编译状态。
安装好打开CCTray后,运行CCTray程序,点击左上角的菜单File下的Settings…,如下图:
点击Settings…会弹出下面的窗体:
切换到Build Projects选项卡,如下图:
点击Add…按钮,添加我们的CCNET服务器,如下图:
输入我们的CCNET服务器后,CCNET服务器上的项目就会在右侧显示出来,如下图:
选中右侧的项目后,点击OK按钮,返回CCTray打开时的界面,我们的二个项目已经添加进来了,如下图:
我们在桌面的右下角的任务栏,可以看到如下图所示的图标:
绿色的那个标示就是CCTray的标示,绿色表示所有的项目都通过了编译,紫红色表示至少有一个项目没有通过编译,橘×××表示有项目正在编译,橘红色表示有项目被强制编译,显示为灰色则说明和CCNET服务器失去了链接。
OK,大家可以使用CCTray实时监视提交更新后项目的编译状态了。
如果大家有什么问题,欢迎和我交流!
其实,CCNET的功能是相当强大的,上面只是最常用的配置,其他还有很多非常好的功能。你想知道吗?那你可以在这里查看 CCNET官方文档 ,实际上,你安装CCNET后,文档也已经安装到你的电脑了,在CCNET的安装目录下的webdashboard的子目录doc中就是。
下面我简单讲一下,如何使用CruiseControl.NET Tray【以下简称CCTray】来监视每次提交后的编译状态。
安装好打开CCTray后,运行CCTray程序,点击左上角的菜单File下的Settings…,如下图:
![](/cnblogs_com/ttzhang/110708_0206_D1.png)
点击Settings…会弹出下面的窗体:
![](/cnblogs_com/ttzhang/110708_0206_D2.png)
切换到Build Projects选项卡,如下图:
![](/cnblogs_com/ttzhang/110708_0206_D3.png)
点击Add…按钮,添加我们的CCNET服务器,如下图:
![](/cnblogs_com/ttzhang/110708_0206_D4.png)
输入我们的CCNET服务器后,CCNET服务器上的项目就会在右侧显示出来,如下图:
![](/cnblogs_com/ttzhang/110708_0206_D5.png)
选中右侧的项目后,点击OK按钮,返回CCTray打开时的界面,我们的二个项目已经添加进来了,如下图:
![](/cnblogs_com/ttzhang/110708_0206_D6.png)
我们在桌面的右下角的任务栏,可以看到如下图所示的图标:
![](/cnblogs_com/ttzhang/110708_0206_D7.png)
绿色的那个标示就是CCTray的标示,绿色表示所有的项目都通过了编译,紫红色表示至少有一个项目没有通过编译,橘×××表示有项目正在编译,橘红色表示有项目被强制编译,显示为灰色则说明和CCNET服务器失去了链接。
OK,大家可以使用CCTray实时监视提交更新后项目的编译状态了。
如果大家有什么问题,欢迎和我交流!
转载于:https://blog.51cto.com/ttzhang/310199