Multi-stage continuous integration is a
software development
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development inv ...
technique intended to achieve highly integrated parallel development activity while reducing the scope of integration problems.
Theory
Multi-stage continuous integration takes advantage of a basic unifying pattern of software development: software moves in stages from a state of immaturity to a state of maturity, and the work is broken down into logical units performed by interdependent teams that integrate the different parts together over time. What changes from shop to shop is the number of stages, the number and size of teams, and the structure of the team interdependencies.
Recommended practices
Multi-stage continuous integration is an expansion upon
continuous integration, it presumes that you are already following those recommended practices.
The larger and/or more complex the project, the higher the chance that the project becomes unstable. Alerts and broken builds increase as the project grows. Progress decreases and the mainline gets increasingly unstable. The risk of build failure increases exponentially as the number and locations of developers grow.
Recommended practice #1
Each developer works on their own task. As they make changes, continuous integration is done against that team's branch. If it does not succeed, then that developer (possibly with help from her teammates) fixes the branch. When there is a problem, only that team is affected, not the whole development effort. This is similar to how stopping the line works in a modern lean manufacturing facility. If someone on the line pulls the "stop the line" cord, it only affects a segment of the line, not the whole line.
It is note-worthy that in recent years the "topic" or "feature" branch model has gained in popularity over the team based branch model. See for example the popular Git-Flow branching model
On a frequent basis, the team will decide to go to the second phase: integration with the mainline. In this phase, the team does the same thing that an individual would do in the case of mainline development. The team's branch must have all changes from the mainline merged in (the equivalent of a workspace update), there must be a successful build and all tests must pass. Integrating with the mainline will be easier than usual because only pre-integrated features will be in it, not features in-process. Then, the team's changes are merged into the mainline which will trigger a build and test cycle on the mainline. If that passes, then the team goes back to the first phase where individual developers work on their own tasks. Otherwise, the team works on getting the mainline working again, just as though they were an individual working on mainline.
Changes propagate as rapidly as possible, stopping only when there is a problem. Ideally, changes make it to the main integration area just as frequently as when doing mainline development. The difference is that fewer problems make it all the way to the main integration area. Multi-stage continuous integration allows for a high degree of integration to occur in parallel while vastly reducing the scope of integration problems.
Recommended practice #2
For multi-stage continuous integration, each team must have its own branch.
Advantages
Multi-stage continuous integration has many advantages:
* When unit tests fail, or a bug is discovered, developers might revert the codebase back to a bug-free state, without wasting time
debugging
In computer programming and software development, debugging is the process of finding and resolving ''bugs'' (defects or problems that prevent correct operation) within computer programs, software, or systems.
Debugging tactics can involve in ...
;
* Integration problems are detected and fixed continuously - no last minute hiatus before release dates;
* Early warning of broken/incompatible code;
* Early warning of conflicting changes;
* 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.
Tools
Tools that support multi-stage continuous integration include:
*
AccuRev
AccuRev is a software configuration management application developed by AccuRev, Inc. and was first released in 1999. In December 2013 AccuRev was acquired by Micro Focus.
Overview
AccuRev is a centralized version control system which uses a ...
[AccuRev and Electric Cloud Partner to Advance Multistage Continuous Integration and Scalable Agile Best Practices](_blank)
accessdate 2009-03-19 - Version Control and
ALM tool
*
Electric Cloud
Electric Cloud, Inc. was a privately held, DevOps software company based in San Jose, CA. Founded in 2002, Electric Cloud was a provider of application release orchestration (ARO) tools, automating release pipelines and managing application life ...
[ — Build, test and deployment framework tool designed to automate the software production lifecycle
* ]AnthillPro
AnthillPro is a software tool originally developed and released as one of the first continuous integration servers. AnthillPro automates the process of building code into software projects and testing it to verify that project quality has been m ...
- Build, dependency, release tool
* Rational Team Concert
Rational Machines is an enterprise founded by Paul Levy and Mike Devlin in 1981 to provide tools to expand the use of modern software engineering practices, particularly explicit modular architecture and iterative development. It changed its ...
[{{Cite web, url=https://jazz.net/, title=Jazz.net, website=Jazz.net] ALM-Platform
See also
*Agile software development
In software development, agile (sometimes written Agile) practices include requirements discovery and solutions improvement through the collaborative effort of self-organizing and cross-functional teams with their customer(s)/ end user(s), ...
* Build automation
*Continuous design Evolutionary design, continuous design, evolutive design, or incremental design is directly related to any modular design application, in which components can be freely substituted to improve the design, modify performance, or change another feature ...
* Continuous integration
*Test-driven development
Test-driven development (TDD) is a software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all software development by repeatedly testing the software against a ...
*Application lifecycle management
Application lifecycle management (ALM) is the product lifecycle management ( governance, development, and maintenance) of computer programs. It encompasses requirements management, software architecture, computer programming, software tes ...
References
Continuous integration
Extreme programming