Continuous integration
From Wikipedia, the free encyclopedia
Continuous integration is a software engineering term describing a process that completely rebuilds and tests an application frequently. Although the underlying concepts existed earlier, "continuous integration" typically refers to the extreme programming practice.
As originally done in Extreme programming, continuous integration is accomplished via a serialized build process. At the completion of a task, the developer (or development pair) takes a build token and runs the build process, including tests. If the tests pass, the task can be committed to the source code repository and release the token.
The more popular form (also known as Automated Continuous Integration) takes the form of a server process or daemon that monitors a version control system for changes and automatically runs the build process (e.g. a make script or Ant-style build script) and then runs test scripts (e.g. JUnit or NUnit). In many cases the build script not only compiles binaries but also generates documentation, website pages, statistics and distribution media (such as Windows MSI files or RPM files).
Scheduled builds, if done frequently enough, would fall under continuous integration. However, nightly builds are too infrequent to qualify.
Continuous integration is frequently associated with extreme programming and other agile software development practices, but can be, and has been, adopted by more conventional methodologies too.
The main advantages of continuous integration are:
- Integration problems are detected and fixed continuously - no last minute hiatus before release dates;
- Early warning of broken/incompatible code;
- Immediate unit testing of all changes;
- Constant availability of a "current" build for testing, demo, or release purposes;
- The immediate impact of checking-in incomplete or broken code acts as an incentive to developers to learn to work more incrementally with shorter feedback cycles.
[edit] Software
- AnthillPro[1] - Urbancode's Java-based Continuous Integration, Build Management, and Application Lifecycle Automation Solution
- Build Forge [2] - IBM Rational's adaptive framework to standardize and automate build and release processes.
- CruiseControl [3] - Java-based framework for a continuous build process.
- CruiseControl.Net [4] - a port of CruiseControl for the Microsoft .NET platform.
- DamageControl [5] - a Continuous Integration server for Ruby.
- Gauntlet [6] - Borland's continuous build and test automation server, primarily for projects that use Ant and JUnit
- Tinderbox [7] - a Mozilla based product
- TeamCity [8] - a Java-based, IDE independent, integrated team environment for Java and .NET. Created by JetBrains [9]].
- Luntbuild [10], a Java-based framework for continuous build process, claims to be a Build Management tool
- Hudson [11] - Java Automated build monitoring system from java.net
- Sin [12] - Continuous Integration for Subversion [13] - a framework continuous integration. Works with subversion only.
- Buildbot [14] - a Python/Twisted-based continuous build system
- Bitten [15] - a Python/Trac-based experimental continuous build system
- Beetlejuice [16] - an easy to install and use continuous build server.
- Apache Continuum [17] - a continuous integration server for building Java based projects
- Apache Gump [18] - Apache's continuous integration tool.
- PMEase QuickBuild [19] - QuickBuild is the professional version of Luntbuild, and aims at being an enterprise level continuous integration server, as well as a build management tool.
- PerfectBuild [20] - Commercial product.
- Pulse [21] - a continuous integration server that claims to adapt well to different types of projects.
- Dart [22] - an open-source, distributed, software quality system that allows software projects to be tested at multiple sites in multiple configurations (hardware, operating systems, compilers, etc.) with tests, reports and dashboards.
- Test-AutoBuild [23] - a continuous integration harness for automatically running build and test processes without the need for user interaction.
- CI Factory - a canned implementation of a build server using CCNET, NAnt, and other industry standard tools. Adherence to a standard development workspace allows for this product to build most any project out of the box.
- Parabuild [24] - a software build management server that provides continuous integration and daily builds.
- CABIE [25] - Continuous Automated Build and Integration Environment. Open source, written in Perl, works with CVS, Subversion and Perforce.
- SCM4ALL SCM4ALL - Commercial product.
[edit] External links
- Continuous integration by Martin Fowler (an introduction)
- Continuous Integration at the Portland Pattern Repository (a collegial discussion)
- Cross platform testing at the Portland Pattern Repository
- Continuous integration Server Feature Matrix (a guide to tools)
- A comparison between Test-Autobuild and other continuous integration servers
- Continuous Integration: The Cornerstone of a Great Shop by Jared Richardson (an introduction)
- Continuous Integration on a Dollar a Day by James Shore (a how-to guide)
- A Recipe for Build Maintainability and Reusability by Jay Flowers
- CruiseControl Dashboard(Yahoo Widget) by Ganesan Janarthanam