Continuous integration is a team habit before it is a tool. GitHub's documentation defines it as a software practice that requires frequently committing code to a shared repository, where committing more often detects errors sooner and reduces the amount of code to debug when something fails.
The site trunkbaseddevelopment.com traces the idea back to Kent Beck's Extreme Programming and makes a point many teams miss: the original intent was a single integration point for the developer team, integrated daily or more often. A CI server that runs tests on branches that live for weeks is automation without integration.
Continuous delivery and continuous deployment extend the idea to releases.
| Term | What it means | Who presses deploy |
|---|---|---|
| Continuous integration | Every change merges into the shared branch often and is built and tested automatically | Nobody, it is about merging |
| Continuous delivery | The shared branch is always in a releasable state and a release is one action away | A person, when they choose |
| Continuous deployment | Every change that passes the pipeline goes to production automatically | The pipeline |
Most small teams do well with continuous delivery to production and continuous deployment to staging. Every merge lands on staging automatically, and production releases happen by an explicit action several times a week or several times a day.



