Developers practicing continuous integration merge their changes back to the main branch
as often as possible.
The developer's changes are validated by creating a build and running automated tests against the build.
By doing so, you avoid the integration hell that usually happens
when people wait for release day to merge their changes into the release branch.
Continuous delivery is an extension of continuous integration
to make sure that you can release new changes to your customers quickly in a sustainable way.
This means that on top of having automated your testing,
you also have automated your release process
and you can deploy your application at any point of time by clicking on a button.
Continuous deployment goes one step further than continuous delivery.
With this practice, every change that passes all stages of your production pipeline is released to your customers.
There's no human intervention, and only a failed test will prevent a new change to be deployed to production.
