Continuous Integration is the practice of building your software many times a day, usually whenever a change is checked into source control, so the development team can find out quickly if they’ve broken something. A build will usually include unit tests, so we can catch broken logic as well as code that plain won’t compile. In the Java world, there are a couple of contenders for CI frameworks, CruiseControl and Anthill. I reckon CruiseControl is a far superior product, and here I want to outline why.
CruiseControl is probably the oldest framework for CI in Java, having been around for a few years now. It’s Open Source, hosted on SourceForge, and developed and supported by people including a bunch of ThoughtWorkers. I work for ThoughtWorks – it’s probably worth stating that clearly here. Anthill is a newer product, and comes in an Open Source GPL version and a “pro” for-money version. Here I’ll be discussing Anthill Pro, which we’re using on my current project.
The argument I hear most often for using Anthill instead of Cruise is because it’s easier to set up. Simply drop a War into a web container and configure using fancy GUI screens. Cruise requires that you build it from source, and configure it using an XML file, but it’s a well documented process and really gives you lots of power to control how Cruise runs. With Anthill, you’re stuck with a (buggy) GUI.
A CI framework runs builds for you, whenever the code in source control changes. CruiseControl includes a “build loop” that continually polls source control for changes, and launches a build when it detects a developer has checked something in. If changes occur during a build, Cruise will realise as soon as the current build is finished, and launch another build straight away. By contrast, Anthill includes a “build scheduler”, in which you can run your build, say, every 15 minutes. The immediate drawback is that it might be several minutes from a change going into source control until Anthill runs the build – in Agile software development faster feedback is better so the Cruise model wins. You might think scheduling a build more often will help, but Anthill tends to get its knickers in a twist when it has lots of stuff in the queue. Schedule a build once a minute and you’ll quickly end up with a long queue, since Anthill isn’t smart enough to realise a build is already scheduled. The trick is to schedule builds at about the same frequency as your build time, so a build will be scheduled soon after each build completes. Unfortunately, Anthill will only let you choose certain scheduling intervals, so if your build takes 20 minutes you’re forced to use a half-hour schedule.
Multiple project support is included in both Cruise and Anthill. In Cruise, each project runs in its own thread, detecting changes and running builds in parallel when projects change. This works great, as long as you don’t try to run too many projects on the same machine (or you’re willing to live with the occasional long build). With Anthill, scheduling multiple projects means they end up in the build queue together, with build threads taking items off the queue and running builds. Unfortunately, there isn’t any way to prevent the same project from being run twice at the same time. If a project is built by two threads, it’s almost certain that the two builds will interfere with each other and fail.
Constant feedback from your build box is required if developers are to act quickly and fix broken builds. Cruise includes various publishers to send email and create a simple, single page website including build status, what changes have been made since the last build, and what tests (if any) are failing. You can also get a system tray application that shows a little green light when the build is good, and goes red and plays a Homer “Doh!” if the build is broken. By contrast, the Anthill emailer doesn’t even reliably send “success” messages when a broken build gets fixed. The web site it generates shows only basic build status – to find out what’s broken we have to produce our own JUnit report page, which is several clicks away from the main page. Similarly the “what’s changed” information is in Anthill’s revisions log, buried 3 clicks deep.
Overall I’ve been disappointed by my experience with Anthill Pro. It looks good at first sight, but for use on anything other than a toy project it just doesn’t cut it. Our current installation has a memory leak, and requires regular restarts so it’ll continue to send status emails. The Anthill Pro developers are apparently “working on it”. I really think the effort spent trying to get Anthill to work would have been better spent building and configuring CruiseControl. The time invested is well worth it, and you get all the benefits of a proper Open Source product.
Cruise and Anthill, part 2
My post last week on CruiseControl vs. Anthill Pro resulted in several emails, including a very well thought out response from Maciej Zawadzki, President of Urbancode (the company that develops Anthill). Maciej made several good points and I feel a clarifying post is in order.
Anthill and CruiseControl differ in their original design goals. Cruise is a Continuous Integration (CI) framework, whilst Anthill is a build server. This leads to the difference in approaches – scheduling builds verses monitoring source control for changes. Whilst Cruise can also function as a build server, for example scheduling a nightly build, its main purpose is CI. Similarly, whilst Anthill can be used to achieve CI, its main purpose is that of a build server.
Maciej noted that several of the problems with Anthill’s scheduling have been addressed in recent releases of Anthill. I’ll certainly make sure we check those out!
Finally there’s plenty of room in the market for both products. Realising that you need something to run builds and tell you when the build is broken is a quantum leap forward from “bad old days” checkin anarchy. If Anthill’s ease of installation helps get more people running an automated build, that’s great for our industry and should be applauded.
分享到:
相关推荐
**持续集成之CruiseControl.rb** CruiseControl.rb是一款开源的持续集成工具,主要用于自动化构建、测试和部署软件项目。它是由ThoughtWorks公司开发的,是CruiseControl.NET的Ruby版本,因此在Ruby社区中被广泛...
【标题】"cruise_control.zip.zip" 暗示我们正在处理一个被压缩的文件,该文件可能包含有关“巡航控制”系统的数据或软件。在IT领域,巡航控制通常指的是自动化构建和部署的过程,用于持续集成和持续交付(CI/CD)...
`build.xml` 是Ant构建脚本,它是CruiseControl执行构建任务时调用的。Ant是一个Java语言编写的构建工具,它使用XML格式来描述构建过程,包括编译、测试、打包等步骤。在`build.xml`中,你可以定义目标(targets)和...
CruiseControl-2.8.4.exe
cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们讲过CC的WEB组件要访问我们的项目build 的状态文件,而下载的 CC2.2 里面自带的 ...
CruiseControl是一款开源的持续集成工具,用于自动化软件开发过程中的构建、测试和部署任务。这份"CruiseControl使用指南.rar"包含了一系列关于如何有效利用CruiseControl进行持续集成的资源,包括文章、教程和示例...
安装完成后,系统会包含一系列必要的文件和目录,比如`cruisecontrol.bat`用于启动服务,`config.xml`作为主要的配置文件,`apache-ant-1.6.5`是CruiseControl依赖的Ant环境,`docs`包含使用文档和示例,`lib`存放...
【CruiseControl + ANT + SVN】是一个集成开发环境(IDE)自动化构建和版本控制的解决方案。这个组合在软件开发过程中发挥着关键作用,确保代码的持续集成和版本管理。下面将详细阐述这三个组件以及它们如何协同工作...
CruiseControl是一款持续集成工具,它能够自动化地构建、测试和部署软件项目,极大地提高了开发效率和产品质量。在本文中,我们将深入探讨如何配置CruiseControl以实现定时运行,确保项目始终保持最新状态。 首先,...
CruiseControl是一款持续集成工具,它能够自动化软件构建、测试和发布的过程,是开发者进行敏捷开发和持续集成的重要工具。本教程将详细讲解CruiseControl的学习与实践。 **第一章 CruiseControl实践** 1.1 Cruise...
### CruiseControl及Ant配置知识点详解 #### 一、CruiseControl简介 **CruiseControl**是一种持续集成(Continuous Integration, CI)工具,主要用于自动化软件构建过程。它支持多种构建工具和版本控制系统,能够...
- **Ant 支持**:CruiseControl 通过 Ant 脚本来管理构建过程。这意味着用户可以通过编写 Ant 脚本来定制自己的构建流程。 - **Jetty Web 服务器**:CruiseControl 使用 Jetty 作为内置 Web 服务器来提供 Web 控制台...
全套汽车巡航系统模糊控制设计Matlab文件-CruiseControl.zip 全套m.file文件,包括模型和 CruiseControl.zip 模糊控制器设计。
4. **插件扩展**:CruiseControl支持各种插件,允许用户根据需求定制构建流程,如集成不同的版本控制工具(Git、SVN)、构建工具(Maven、Ant)以及测试框架(JUnit、TestNG)。 5. **Web界面**:CruiseControl提供...
CruiseControl.NET-1.8.2.0-Setup.exe ccnet 服务端
在电机控制系统领域,"cruise_control.zip"是一个重要的资源,它包含了电机控制仿真的相关模型。这个压缩包可能是一个综合性的研究或教学材料,旨在帮助用户理解和设计电机控制策略。"电机控制仿真模型8"这一标签...
标题与描述概述的知识点主要涉及了使用CruiseControl与Maven2进行持续集成的配置流程。这是一项在软件开发过程中非常关键的技术实践,它能够自动检测代码库中的更新,并自动执行构建、测试以及部署等任务,从而确保...
CruiseControl.NET-CCTray-1.8.4.0-Setup.exe