These are two terms that are widely used, and often even synonymous. But what is the difference between them (if any)? What are the most common tools used in both scenarios?
Integration is process. Delivery is a result.
Continuous integration is a process with the purpose of controlling the code lifecycle of a system developed by several people and that has several distinct modules that need to be "integrated". In addition to being integrated, this process tries to guarantee that this happens continuously, that is, that there is a certain standard in the procedures that allows to deal with the problems that occur in a logical way without having to stop to think about the solution to each problem.
The most common parts of continuous integration (very briefly) are:
- Source code repositories : where you can control versions, that is, you can have a "picture" of the source code of each package you want to release for testing, for example. The most common is a Git repository.
- Build Steps : where you can have an automated script that compiles the source code and generates a testable "package" of your system. In case the code does not compile, developers are alerted as soon as they commit the sources.
- Testing Steps : where you can perform manual or automated tests (unit, integration, etc) of your packages.
- Setup : where you can generate a system-wide "package" that can be installed in an environment for testing or for production.
- Deployment : where there may be a script to install the "package" automatically in the production environment.
The continuous delivery is a result of the continuous integration process with the delivery of installable packages to the customer, that is, a system package containing the adjustments and new functions is delivered at each period.
In this way, it is possible to have the continuous integration process without necessarily making continuous deliveries. The term "Continuous Integration" comes from the 1990s and "Continuous Delivery" is more recent because it became more viable with new technologies and software dedicated to running and monitoring processes.
Recently (for me) another term appeared in this process called Continuous Deployment . Basically, not to go into details, deployment would be a step beyond delivery. The delivery ends with the system ready to be deployed to a customer or in a production environment, whereas continuous deployment would be the process in which this part would also be automated.
I've updated the steps in the list above with this new phase of the process.