如果您一直跟着这个Thread,那么现在你应该已经可以使用CruiseControl来进行持续集成了。如果你有很多项目需要持续集成的话,可能在同一时刻会有很多项目排队等待构建的现象,以至于使各项目团队无法得到及时的反馈,此时一个集成服务器就不够了。下面我们就来扩展我们的Build Grid吧。
一、前提条件与假设
根据前面的介绍,你的第一台持续集成服务器已经可以正常运行了。这里列出如下假设,以方便后续描述。
(1) 首台持续集成服务器IP地址为:192.168.1.6,hostname为CI_One。
(2) 在首台持续集成服务器上:
CruiseControl的根目录是:C:/CruiseControl,今后用${CC.HOME}表示。
CruiseControl的Projects目录是:C:/CruiseControl/Proects,今后用${CC.Projects}表示。
CruiseControl的Logs目录是:C:/CruiseControl/Logs,今后用${CC.Logs}表示。
CruiseControl的Artifacts目录是:C:/CruiseControl/Artifacts,今后用${CC.Artifacts}表示。
(3) 你将在IP地址为:192.168.1.8,hostname为CI_Two的机器上部署第二个持续集成服务器。
(4) 把名为CI_One的机器做为主服务器,即把CI_Two上构建的日志(Logs)和结果(Artifacts)放发布到CI_One的${CC.Logs}和${CC.Artifacts}中。
(5) 你将在CI_Two上构建名为CI_TWO_connectFour的项目,它也使用SVN作为项目的SCM。
二、准备工作
(1) 将CI_One上的${CC.Logs}和${CC.Artifacts}设为共享目录,保证CI_Two对这两个目录可写。
(2)可以在CI_Two上,把CI_One的${CC.Logs}和${CC.Artifacts}两个目录分别映射成两个网络驱动器,名字为别为Z:/和Y:/。
(3) 将CI_One上的CruiseControl,整个拷贝到CI_Two上的C盘根目录下,即对于CI_Two来说,CruiseControl的工作目录是C:/CruiseControl。(当然,也可以把一个你编译后生成的CruiseControl拷贝过来。)
(4) 在CI_Two的${CC.Projects}目录下,建立名为CI_TWO_connectFour的目录,把SVN中的源代码checkout到这个目录下,并确保build.xml文件在这个目录下。
三、第二台持续集成服务器的配置工作
以下所有工作全部发生在名为CI_Two这台机器上。
(4) 修改配置文件config.xml,如下所示:
<
cruisecontrol
>
<
project
name
="CI_TWO_connectFour"
>

<
listeners
>
<
currentbuildstatuslistener
file
="Z:/${project.name}/status.txt"
/><!-- 请注意这里的z: -->
</
listeners
>

<
bootstrappers
>
<
svnbootstrapper
localWorkingCopy
="projects/${project.name}"
/>
</
bootstrappers
>

<
modificationset
quietperiod
="30"
>
<
svn
localWorkingCopy
="projects/${project.name}"
/>
</
modificationset
>

<
schedule
interval
="300"
>
<
ant
anthome
="apache-ant-1.7.0"
buildfile
="projects/${project.name}/build.xml"
/>
</
schedule
>

<
log
dir="Z:/"
><!-- 请注意这里的z: -->
<
merge
dir
="projects/${project.name}/target/test-results"
/>
</
log
>

<
publishers
>
<
onsuccess
>
<
artifactspublisher
dest
="Y:/${project.name}"
file
="projects/${project.name}/target/connectfour.jar"
/>
<!-- 请注意这里的Y: -->
</ onsuccess >
</
publishers
>

</
project
>
</
cruisecontrol
>
(5) 修改启动脚本
打开CruiseControl.bat文件,找到下面这行代码:
set
EXEC
=
%JAVA_PATH% %CC_OPTS% -Djavax
.
management
.
builder
.
initial
=
mx4j
.
server
.
MX4JMBeanServerBuilder -jar
"
%LAUNCHER%
"
%* -jmxport
8000
-webport
8080
-rmiport
1099
将下面这段代码:
-dashboardrul http:
//
192.168
.
1.6
:
8080
/
dashboard
set
EXEC
=
%JAVA_PATH% %CC_OPTS% -Djavax
.
management
.
builder
.
initial
=
mx4j
.
server
.
MX4JMBeanServerBuilder -jar
"
%LAUNCHER%
"
%* -jmxport
8000
-webport
8080
-rmiport
1099
-dashboardrul http:
//
192.168
.
1.6
:
8080
/
dashboard
保存该文件。
四、运行Build Grid
(1) 运行${CC.Home}中的CruiseControl.bat,启动CI_One上的CruiseControl。
(2) 运行${CC.Home}中的CruiseControl.bat,启动CI_Two上的CruiseControl。
五、访问你的Build Grid
(1) 在任何一台可以访问CI_One的机器上,通过浏览器访问下面的网址http://192.168.1.6:8080/dashboard 来查看你构建的项目。当然,使用hostname也可以。因为CruiseControl内置了一个Jetty应用服务器,版本是6.1。
(2) 你同样可以使用http://CI_One:8080/ 访问CI_One的Old Reporting 页面,用http://CI_Two:8080/访问CI_Two的Old Reporting。不过你会发现,你在CI_Two上配置的项目状态在CI_One的Old Reporting页面都显示为?????。这就是Old Reporting 的局限性。
小贴士:
(1) 要保证所有项目(无论在哪台机器上构建)的项目名都不相同,否则,CruiseControl的DashBoard只会选取其中的一个同名项目,忽略其它的同名项目。
(2) 在CI_Two中启动脚本中,一定要正确填写DashBoardURL参数,确保是CI_One的地址和端口。
(3) 如果项目的log文件比较大,或者构建时使用内存较多,在启动脚本中,可以通过增加JAVA命令行参数,扩大JVM的内存,以免出现OutOfMemory错误。
到此为止,CruiseControl的入门篇就结束了。以后,作为CruiseControl的进阶篇,我还将继续介绍CruiseControl的一些详细配置。
本文指导如何设置CruiseControl的构建网格,通过增加额外的构建服务器来分散构建负载,实现多个项目的并行持续集成。文章详细介绍了从共享日志和构建结果开始,到配置第二台持续集成服务器的全过程。
2022

被折叠的 条评论
为什么被折叠?



