Continuous Integration
Continuous integration is the practice of merging developer changes into a shared branch frequently — at least daily — with each integration verified by an automated build and test suite. It catches integration problems early while the context is fresh.
itDevOps and software delivery | OpenSkills.info
Course pathWalk it in order
Look it upDip in anytime
Go furtherLeaves this page
Don't Panic
Don't Panic — Continuous Integration
Continuous integration is a cadence before it is a tool, and the whole practice fits inside one claim about frequency: nobody's work stays unmerged for longer than a day, and nothing lands on the branch everyone shares without an automated build having run the tests across it first.
Buy Jenkins, adopt GitHub Actions, install whatever you fancy — where changes still ripen on branches for a fortnight, none of it qualifies. The service runs builds. The practice is the interval.
What it exists to prevent is the private theory. A branch is one developer's guess about the product, and two clean guesses can merge without a single textual conflict and still be wrong together.
That is a semantic conflict: the text combines perfectly, the behaviour does not, and version control cannot see it. The longer branches live, the more of them exist and the staler everyone's assumptions have grown.
Shrink the interval and the batch, and integration stops being an event. Failures point at something recent, the repair surface is narrow, and whoever caused it still remembers why.
A credible loop is a short list. One mainline, the single shared branch representing the product as it currently stands. Everything needed to build and configure it under version control. A build that is automated, reproducible and self-testing — it runs the tests itself and returns an unambiguous pass or fail — triggered on every integration.
Then the part that is a social agreement rather than a setting: a broken mainline becomes the team's immediate business, fixed or reverted. Keep stacking work on a broken base and every result after it is ambiguous evidence. Ten minutes is the usual ceiling for the quick suite, with slower end-to-end and performance work in later stages.
Now the arithmetic nobody expects. Flakiness is a rate, and rates compound. One test that passes 99.99% of the time looks beyond criticism; ten thousand such tests, each independently that reliable, produce a red build roughly 63% of the time.
That is why large suites go red with nobody having broken anything, and why chasing individual flaky tests — ones that fail without any product change — never converges. What decides the outcome is the suite-level failure rate, and it is a product of the parts. Measure per-test flake rates and budget them.
All of which makes automatic retry the most tempting wrong answer available. Retrying until green turns a visible cost somebody would have fixed into an invisible one paid in compute, and once retries are policy, red no longer means broken and green no longer means working. It also conceals race conditions, which look exactly like flakes and are the defects most worth catching.
Two numbers to leave with. Mainline is a queue: once build duration multiplied by merge rate approaches one, every merge waits behind another and the pressure to batch changes returns — precisely the thing this was meant to remove. And count the minutes per week mainline spends red, rather than build success rate, which improves whenever people stop pushing.
The Intro carries the loop, and a useful list of the things CI is not. Checklist on the Cheatsheet. Read Field Notes before pinning a third-party action by tag.
Where this skill leads
Relevant careers
See how this topic contributes to broader role-level skill maps.
Sources
- https://martinfowler.com/articles/continuousIntegration.html
Supports
- CI definition, daily mainline integration, and automated build including tests
- Mainline, self-testing build, every-change trigger, fast build, and immediate repair practices
- Work-in-progress hiding, branch distinctions, and the limits of CI services
- https://dora.dev/capabilities/continuous-integration/
Supports
- Trunk-based small batches and at-least-daily integration
- Build-break priority, fast unit tests, and common CI pitfalls
- Relationship between CI and continuous delivery
- https://dora.dev/capabilities/trunk-based-development/
Supports
- Short branch lifetime, frequent small integrations, and reduced merge complexity
- Immediate fix-or-revert response and review-latency constraints
- Branch, freeze, and integration-phase measures
- https://martinfowler.com/articles/branching-patterns.html
Supports
- Mainline integration frequency and branch-pattern vocabulary
- Decomposing work so changes can integrate before a full feature is exposed
- https://dora.dev/capabilities/test-automation/
Supports
- Fast reliable automated suites, test layering, and developer ownership
- Flaky-test risks and placement of broader checks in delivery pipelines
- https://dora.dev/capabilities/continuous-delivery/
Supports
- CI as a capability contributing canonical builds and packages to continuous delivery
- https://martinfowler.com/articles/originalContinuousIntegration.html
Supports
- Original 2000 CI article: daily integration, shared source, automated build, and automated testing
- https://circleci.com/blog/a-brief-history-of-devops-part-iii-automated-testing-and-continuous-integration/
Supports
- Hudson release in 2005 and its relationship to the later Jenkins project
- https://www.jenkins.io/blog/2011/01/11/hudsons-future/
Supports
- 2011 proposal to rename the Hudson project to Jenkins
- https://circleci.com/blog/announcing-circleci-s-100m-series-e/
Supports
- CircleCI launch in 2011 and contemporary CI/CD market context
- https://about.gitlab.com/releases/2013/01/17/gitlab-ci-2-0/
Supports
- GitLab CI 2.0 release and concurrent per-project build behavior
- https://buildkite.com/resources/blog/out-of-beta/
Supports
- 2013 Buildbox release from beta and public signup
- https://github.blog/enterprise-software/automation/action-demos/
Supports
- GitHub Actions announcement at GitHub Universe in October 2018
- https://github.blog/news-insights/product-news/universe-day-one/
Supports
- GitHub Actions general availability and self-hosted runner announcement in November 2019
- https://www.jenkins.io/doc/
Supports
- Jenkins as a self-contained open-source automation server for building, testing, delivery, and deployment
- https://www.jenkins.io/project/governance/
Supports
- Jenkins core MIT licensing and open-source project governance
- https://docs.github.com/en/actions/concepts/workflows-and-actions/workflows
Supports
- GitHub Actions workflow files, repository-event triggers, jobs, runners, and build/test use cases
- https://github.com/pricing
Supports
- GitHub Actions included minutes and free usage for public repositories
- https://docs.gitlab.com/ci/pipelines/
Supports
- GitLab CI/CD YAML pipelines, jobs, stages, triggers, and runners
- https://about.gitlab.com/pricing/
Supports
- GitLab Free, Premium, and Ultimate plans and CI/CD availability
- https://circleci.com/docs/guides/orchestrate/workflows/
Supports
- CircleCI workflows, job ordering, concurrency, and failure handling
- https://circleci.com/pricing/
Supports
- CircleCI Free, usage-based, and scale plans
- https://buildkite.com/docs/pipelines
Supports
- Buildkite hosted and self-hosted pipeline architectures and agents
- https://buildkite.com/pricing/
Supports
- Buildkite Personal free tier, Pro, and Enterprise plans
- https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops
Supports
- Azure Pipelines build, test, CI, artifact, and release capabilities
- https://azure.microsoft.com/en-us/pricing/details/devops/azure-devops-services/
Supports
- Azure DevOps service pricing and included pipeline capacity
- https://www.jetbrains.com/help/teamcity/creating-and-editing-build-configurations.html
Supports
- TeamCity build configurations, triggers, agents, build chains, and configuration as code
- https://www.jetbrains.com/teamcity/buy/
Supports
- TeamCity Professional free edition, paid on-premises expansion, and cloud pricing
- https://docs.github.com/en/actions/tutorials/build-and-test-code/nodejs
Supports
- A repository workflow in .github/workflows can trigger a Node.js build and test job on push and pull-request events
- Using npm ci followed by the project build and test commands on a GitHub Actions runner
