A continuous integration pipeline
A CI pipeline is the automated path a code change travels from a developer's commit to a verified, releasable build. It compiles, runs the tests, checks the rules, and assembles the artifacts, every time, for every change. Its real jobJobUserJob To Be Done: what the user is trying to accomplishView reference → is social as much as technical: it keeps many people's work merging into one shared line continuously, so integration problems surface in minutes, long before they could fester into a painful merge weeks later.
Grady Booch named the idea. In *Object-Oriented Analysis and Design with Applications* (2nd edition, 1994) he used the phrase "continuous integration" to describe integrating the parts of a system frequently as it grew, sparing teams the one late big-bang integration that had been the norm. Booch supplied the term; he did not yet mean the rapid, automated rhythm the practice later took on.
That rhythm came from Extreme Programming. Kent Beck and the team on the Chrysler C3 project in the late 1990s pushed integration to the limit, merging and rebuilding many times a day so the codebase stayed in a working state continuously. Beck's *Extreme Programming Explained* (1999) put continuous integration among XP's core practices. Martin Fowler then codified it for a wider audience in his article *Continuous Integration*, first published in 2000 and substantially revised in 2006, which set out the now-standard rules: a single source repository, an automated and self-testing build, commit to mainline every day, and keep the build fast.
The terms multiplied as the practice matured, and they are worth keeping straight. Continuous integration validates every change against the shared mainline. Continuous delivery, formalised by Jez Humble and David Farley in *Continuous Delivery* (2010), extends the pipeline so that every validated build is kept in a deployable state, with a human deciding when to releaseReleaseProduct SpecificationA shipped version of the productView reference →. Continuous deploymentDeploymentEngineeringA deployment eventView reference → goes one step further and ships every passing change to production automatically, with no human gate. The pipeline is the spine running through all three: the same path to production, with the line drawn at a different point.
An engineer on a logistics product pushes a change to the route-optimiser. The pipeline wakes on the commit. Stage one installs dependenciesDependencyTeam & OrganisationA cross-team or system dependencyView reference → and compiles in 90 seconds. Stage two runs 1,400 unit tests in parallel across four workers, two minutes. Stage three lints, type-checks, and scans dependencies for known vulnerabilitiesVulnerabilitySecurityA known vulnerabilityView reference →. Stage four builds a container image, tags it with the commit SHA, and pushes it to the registry as the build artifactBuild ArtifactEngineeringA build output (binary, container image)View reference →. Eight minutes after the push, the engineer has a green tick and a versioned image ready to deploy. A colleague who pushed an incompatible change to the same module twenty minutes earlier already saw red, fixed it, and re-pushed, so the two changes never collided in anyone's working copy. That is continuous integration doing the one thing Booch named it for.
In the Unified Product Graph, the CI pipeline is the engine node of the engineering region, the thing every other delivery concept routes through. A ProductStrategyThe product being created, the root of the graphView reference → connects via productProductbuilt byCI Pipelinehierarchy, recording the path by which the product is assembled. The pipeline's outputs and actions are explicit edges: product_built_by_ci_pipelineCI PipelineproducesBuild Artifacthierarchy for what it makes, ci_pipeline_produces_build_artifactCI PipelinedeploysServicecross-domain for what it ships, and ci_pipeline_deploys_serviceInfrastructure Componentbuilt byCI Pipelinehierarchy for the infrastructure-as-code it provisions. Modelling the pipeline as a first-class node, with its inputs and outputs as edges, turns "how does code reach production here?" into a path you can walk, freeing the answer from one engineer's head.infrastructure_component_built_by_ci_pipeline
Type-specific fields on BaseNode
pipeline_typestringPipeline scope, narrowest to broadest. `build` = compile only. `test` = test only. `deploy` = ship to environment. `release` = create release artifact. `full` = commit-to-deploy.
triggerstringTriggering event. @example "Push to main", "PR merge", "Nightly schedule at 02:00 UTC", "Manual dispatch"
avg_durationstringAverage run duration across recent executions. @example "4m 30s", "12 minutes"
last_run_statusstringResult of the most recent run. Current health indicator.
target_branchstringPrimary branch. The branch that triggers production deployments. @example "main", "release/*"
run_countnumberTotal runs since creation. Indicates activity level. @example 1452
success_ratenumberReliability metric for the pipeline itself: % of runs that succeed. @example 94.3
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
5 edge types connected to this entity.
product_built_by_ci_pipelineinfrastructure_component_built_by_ci_pipelineci_pipeline_produces_build_artifactci_pipeline_deploys_serviceagent_hook_triggers_ci_pipeline