做PM真的不容易!
经过三天的配置,终于把cruisecontrol 配置好了,其实要说配置好,第一天装上就可以用了,因为cc里面本来就有例子,可实现java+svn+junit的持续集成。但,我手上的项目是C++的,用的是cppunit,没办法,只得仔细看配置文档,上网查教程。也许你会问,为什么不用CCNET,CCNET本身就支持C++ CPPUNIT,原因很简单,其实我就是想挑战一下而已,呵呵!因为我相信,CC做了这么多年,不会是这么差劲,肯定有办法让他支持其它语言。
好了,闲话不多说,我一向写BLOG都是直奔主题的,这次说了么多,实在。。。。。。。。。
第一。下载CC cpptask.jar ant-contrib-1.0b3.jar就只需这几个东东哦。cpptask.jar也许你下不到,没关系,把压缩包下下来,然后用ANT编译一下,就会有cpptask.jar了。
第二。把cpptask.jar ant-contrib-1.0b3.jar 放到 cc里面的ant/lib目录下。
第三。cruisecontrol.bat里面加入
set EXTLIBDIR=%ANT_HOME%\lib
%EXTLIBDIR%\ant-contrib-0.6.jar;%EXTLIBDIR%\cpptasks.jar;
最后加入即可。
第四。下班了,明天再写!
第五。我又来上班啦,继续写。config.xml配置如下,和java项目的配置差不多。
<project name="test">
<listeners>
</listeners>
<bootstrappers>
<antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" />
</bootstrappers>
<modificationset quietperiod="30">
<filesystem folder="projects/${project.name}" />
</modificationset>
<schedule interval="30">
<ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" />
</schedule>
<log>
<merge dir="projects/${project.name}/target/test-results" />
</log>
<publishers>
<onsuccess>
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.exe"/>
</onsuccess>
</publishers>
</project>
第六。配置C++编译环境。在VC下有个
@set PATH=D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;D:\Program Files\Microsoft Visual Studio 8\VC\BIN;D:\Program Files\Microsoft Visual Studio 8\Common7\Tools;D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\bin;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\bin;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH%
@set INCLUDE=D:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;D:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE%
@set LIB=D:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;D:\Program Files\Microsoft Visual Studio 8\VC\LIB;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB%
@set LIBPATH=c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB
把它加进环境变量里面去,当然你也可通过脚本的方式调用。
第七。在test项目里面加入build.xml
<project name="test" default="compile" xmlns:cpptasks="antlib:net.sf.antcontrib.cpptasks">
<target name="compile">
<exec executable= "cmd.exe">
<arg line= "/c 'D:/Program Files/CruiseControl/projects/test/test.bat'"/>
</exec>
</target>
</project>
第八。test.bat如下:
svn update
devenv test.sln /rebuild
cd debug
test.exe
说明一下,为什么要svn update,是因为,cc部署在服务器上,而程序员是从自己的PC上提交到SVN服务器,提交上去之后,并不能马上自动构建,而需要update到服务器上,然后从服务器的checkout目录构建。
第九。如果你发现CC并不自动构建你配置的项目,那么先看看CC的服务器有没有报什么错,我遇到一个问题就是,在CC第一次去构建项目时,就已经报错,所以CC怎么也不会显示已经构建过项目。以上的做法,已经能让CC编译C++了,但,还看不到想要的结果,CC显示的结果是从LOGS里面去读取出来的。因此在项目里面的CPPUNIT要求要把日志输出到CC/LOGS/TEST目录下去,还有,CC会自动读取最新时间的日志,所以把CPPUNIT输出的日志名字搞个很久以后的时间,这样就没有问题了,哈哈!
总结一下,我配置好这个东东大概花了三天的时间,很是想吐血,网上没有什么针对C++ CPPUNIT的文档,官网上也找不到,其实CC++编译什么语言没关系,它做的事就是检测SVN提交,然后调用ANT去编译,至于怎么编译是ANT的事,所以其实要做是让ANT能编译你的东东,然后把日志输出到logs/test目录下面去。