What is Continuous Integration?
R: “Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily – leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.” – (Martin Fowler)
This allows the detection of integration errors as soon as possible, such as compilation errors, notifications of the management system configuration and errors reported by the test suite.
“Continuous Integration is an attitude, not a tool.” – (James Shore)
Main Associated Practices
- Version Control
- Automated Build
- Maintain a single source repository
- Automated build process
- Self-testable Build
- Everyone should save the changes (commit) daily
- Every commit should build on an integration machine
- Keep the build fast
- Run the tests in a similar environment to the production environment
- Make it easy for anyone to get the last executable
- Ensure that anyone can see what’s happening
- Automated deployment
Prerequisites to have Continuous Integration
- Source repository with version control
- Solid set of tests
- Automated build
- Homologation environment
- Improved code quality.
Using code coverage tools, among other tools, code quality tends to grow.
- Improved feedback.
Continuous integration shows constant and demonstrable progress.
- Improved error detection.
Continuous integration allows you to quickly detect and handle errors quickly, usually minutes after they have been introduced into the product. The effective continuous integration requires automated unit testing with an appropriate code coverage.
- Improved collaboration.
Continuous integration allows team members to work together safely. They know they can make a change in the code, integrate the system and quickly determine if your changes conflict with others.
- Improved system integration.
By continuous integration, during the project you know you can actually build the system, thereby smoothing the surprises of the integration at the end of life cycle.
- Reduced number of parallel changes that need to be merged and tested.
Less problems to be solved.
- Reduced number of errors found during system testing.
All conflicts are resolved before making the new changes available by the person who is best placed to solve them.
- Reduced technical risk.
You always have an updated system in order to be tested.
- Reduced risk management.
By continuous integration of the system, you know exactly how many features already built so far, improving your ability to predict when, and if, you will actually deliver the desired functionality.
- Initial time required for configuration/deployment
- Well-developed test suite is required to achieve the advantages of automated tests
The best known continuous integration tool is currently Jenkins. It is noteworthy that the automated continuous integration reduces the chance of human errors on deployment or integration.
I hope you liked it.