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
Notable examples of continuous integration software include:
- AnthillPro - a commercial tool from Urbancode. Along with CruiseControl, Anthill is one of the original tools in this category; it remains a market and technology leader constantly adding new features such as dependency mangement, workflow automation, etc.
- Bamboo - Commercial continuous integration server from Atlassian
- BuildBot - a Python/Twisted-based continuous build system
- Build Forge - IBM Rational's adaptive framework to standardize and automate build and release processes.
- CABIE - Continuous Automated Build and Integration Environment. Open source, written in Perl, works with CVS, Subversion and Perforce.
- Apache Continuum - a continuous integration server supporting Apache Maven and Apache Ant.
- CruiseControl - Java-based framework for a continuous build process.
- CruiseControl.NET - .NET-based framework for a continuous build process.
- CruiseControl.rb - Ruby-based framework for a continuous build process.
- DamageControl - a continuous integration server for Ruby.
- Apache Gump - Apache's continuous integration tool.
- Hudson - MIT licensed, written in Java, runs in servlet container, supports CVS, Subversion, Ant, Maven, and shell scripts.
- Tinderbox - a Mozilla based product
- TeamCity - a commercial tool by JetBrains. Web-based with IDE (IntelliJ IDEA, Eclipse, Microsoft Visual Studio) support. Includes many innovative features.
[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