They are two terms that are widely used, and often even synonymously. But what is the difference between them (if any)? What are the most common tools used in both scenarios?
Integration is process. Delivery is result.
Continuous integration is a process for the purpose of controlling the code lifecycle of a system developed by several people and that have several distinct modules that need to be "integrated". In addition to being integrated, this process tries to ensure that this occurs continuously, that is, that there is a certain standard in the procedures that allows dealing with 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 "photo" 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 the event that 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 a test or production environment.
- Deployment : where there might be a script to install the "package" automatically in the production environment.
Continuous delivery is a result of the continuous integration process with the delivery of installable packages to the customer, that is, each period a system package is delivered that contains the adjustments and new functions.
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 has become 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 detail, deployment would be a step beyond delivery. Delivery ends with the system ready to be deployed to a customer or 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.