CI
How it works
Developers regularly commit small changes to a shared repository, first updating their copy with others' changes. A CI server detects a new commit (or runs on a schedule), checks out the code, runs an automated build and a suite of tests (unit, integration and others) and reports pass/fail. A broken build is treated as top priority โ the team fixes it before adding further changes, so the mainline stays in a workable, deployable state.
Problem solved
It solves the problem of integration hell: when developers work on separate branches for a long time and merge only at the end, conflicts, hard-to-diagnose defects and regressions accumulate. Infrequent integration makes the cost of merging unpredictable and growing with how far branches have diverged.
Components
A version control system (e.g. Git) with an integration branch where all developers' changes land.
A compile/package process triggered automatically on each integration.
A self-testing build that signals regressions immediately after integration.
Automation orchestrating the whole integration cycle (e.g. Jenkins, GitLab CI, GitHub Actions).
Reporting integration status so failures are fixed quickly.
Implementation
Long build and test times stretch the feedback loop and discourage frequent integration.
Tests with nondeterministic results erode trust in CI and lead to red builds being ignored.
Leaving a red build unfixed defeats CI's core rule โ an always-working mainline.
Evolution
In Object Oriented Design: With Applications; he did not yet advocate integrating many times a day.
Kent Beck's Extreme Programming Explained establishes CI as one of XP's practices and recommends integrating more than once a day.
Release of one of the first open-source CI servers, enabling automation of integration.
The updated version of the essay "Continuous Integration" that consolidated the definition and practices of CI.
The first Jenkins release (2011-02-02) after splitting from Hudson; it became the leading open-source CI/CD tool.
Hyperparameters (configurable axes)
Whether the build runs on every commit or on a schedule (e.g. once a day).
How often developers merge to the mainline; XP recommends more than once a day.
The set of tests run on integration (unit, integration, e2e) and the speed/coverage trade-off.