Continuous Delivery is a software engineering approach in which teams produce and test software in short cycles, ensuring that the software can be reliably released at any time. This approach enables building, testing and releasing deployable software faster and more often.
When implemented correctly, the result is predictable, routine software releases that can be deployed at any time during the engineering process – even in large-scale, distributed systems and complex production environments. Continuous delivery completely eliminates the need for many of the painful integration, testing and hardening phases that traditionally follow code development.
CI is an organizational practice that aims to improve software quality and development speed by applying regular and automated unit tests against new code. Using a version control system, many development teams will regularly push new code from a project’s branches back to the main branch, allowing tested code to be quickly merged with the project and verified as deployable. A popular unit testing framework for Java code is JUNIT.
Keeping a software project running on-time and on-budget is a complicated dance between version control systems, automated testing frameworks, and deployment mechanisms. Continuous integration helps to ensure that developers are constantly merging codebases on a daily basis to help prevent surprises further down the road.
By catching problems early on, the unpleasant phenomenon of “integration hell” can be avoided, thereby saving the development team lots of headaches and time – and the company lots of money.