有個項目使用了CruiseControl.NET(以下簡稱CC.NET)作為持續集成工具,周末抽空研究了一下,發現這款由ThoughtWorks貢獻的開源工具功能非常強大,主要體現在下面三個方面:
1)靈活、高可配置性,如:多重組合條件觸發、多任務隊列策略;
2)兼容目前幾乎所有的流行SCM工具,使得多種異構系統能夠由CruiseControl.NET統一監控和管理;
3)完善的使用文檔,使上手和維護變得容易;
而該項目引以自豪的代碼check in觸發構建的功能通過CC.NET也很容易實現。之前使用過Hudson,該系統采用主從式架構,使用者通過網頁讓Master控制Slave動作,由于Master由別的部門管理,出問題后需要聯系相關人解決,會有一定的處理延遲,而且安裝在構建機上的Slave服務經常崩潰。而CC.NET直接安裝在構建機上,配置IIS后可通過網頁直接訪問,操作維護都較前者容易。由于之前的構建腳本是用VisualBuild實現的,所以不可能再花時間用CC.NET再寫一遍。而通過實驗得知,其實CC.NET能夠以ExecutableTask的形式很好地與VisualBuild集成,目前每小時定時構建、NightBuild和構建成功后觸發的自動測試都已經放到了CC.NET上了。
ccnet.config Example:
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<queue name="Q1" duplicates="ApplyForceBuildsReAdd" />
<queue name="Q2" duplicates="ApplyForceBuildsReAdd" />
<project name="AgileBuild" queue="Q1" queuePriority="1">
<category>AutoBuild</category>
<triggers>
<filterTrigger startTime="18:00" endTime="10:00">
<trigger type="intervalTrigger" name="Continuous" seconds="1800" buildCondition="ForceBuild" />
<weekDays>
<weekDay>Monday</weekDay>
<weekDay>Tuesday</weekDay>
<weekDay>Wednesday</weekDay>
<weekDay>Thursday</weekDay>
<weekDay>Friday</weekDay>
</weekDays>
</filterTrigger>
</triggers>
<tasks>
<exec>
<executable>VisBuildCmd.exe</executable>
<buildArgs>E:\GAMEDev\AgileBuilder.bld</buildArgs>
<baseDirectory>D:\VisBuildPro7</baseDirectory>
<buildTimeoutSeconds>3000</buildTimeoutSeconds>
</exec>
</tasks>
</project>
<project name="NightBuild" queue="Q2" queuePriority="1">
<category>AutoBuild</category>
<triggers>
<scheduleTrigger time="23:00" buildCondition="ForceBuild" name="Scheduled">
<weekDays>
<weekDay>Monday</weekDay>
<weekDay>Tuesday</weekDay>
<weekDay>Wednesday</weekDay>
<weekDay>Thursday</weekDay>
<weekDay>Friday</weekDay>
</weekDays>
</scheduleTrigger>
</triggers>
<tasks>
<exec>
<executable>VisBuildCmd.exe</executable>
<buildArgs>"BUILD_OPTION=clientworldeffect" "PACK_TYPE=RAR" E:\GAMEDev\NightBuilder.bld</buildArgs>
<baseDirectory>D:\VisBuildPro7</baseDirectory>
<buildTimeoutSeconds>0</buildTimeoutSeconds>
</exec>
</tasks>
</project>
<project name="NightAutoTest" queue="Q2" queuePriority="2">
<category>AutoTest</category>
<triggers>
<projectTrigger serverUri="tcp://heath-builder:21234/CruiseManager.rem" project="NightBuild">
<triggerStatus>Success</triggerStatus>
<innerTrigger type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
</projectTrigger>
</triggers>
<tasks>
<exec>
<executable>VisBuildCmd.exe</executable>
<buildArgs>E:\GAMEDev\AutoTest.bld</buildArgs>
<baseDirectory>D:\VisBuildPro7</baseDirectory>
<buildTimeoutSeconds>0</buildTimeoutSeconds>
</exec>
</tasks>
</project>
</cruisecontrol>
References
[1] http://cruisecontrol.sourceforge.net/
[2] http://www.kinook.com/VisBuildPro/