Continuous integration (CI) is a practice in which code versions are continuously integrated into a shared repository. This practice ensures that new codes are automatedly tested and that errors are quickly detected and fixed.
Continuous delivery takes CI one step further by ensuring that after integration, the code base is ready to be released any time, within just a push of a button. Therefore, CI can be considered a prerequisite for continuous delivery, the other essential part of the CI/CD pipeline.
As for continuous deployment, no manual step is required. Once the codes have passed the tests, they are automatically pushed to the production environment.
All these three components: continuous integration, continuous delivery, and continuous deployment are essential phases of implementing DevOps.
On one hand, continuous delivery is more suitable for applications that are already existed with active users so that things can flow a bit slower and be more tuned. On the other hand, if you plan to release a brand new software and destined the whole process to be fully automated, continuous deployment is a more suitable choice for your product.