clement13.net
Original photo: Ouvriers sur une chaîne de montage de roues dans une usine automobile
Description
Ouvriers sur une chaîne de montage de roues dans une usine automobile
Source
auteur non indiqué · original page
Licence
PD Public domain
Original photo, unretouched. The background is a version of it stylised by the site.

CI/CD: continuous integration and continuous delivery

You will be able to precisely define continuous integration (CI), continuous delivery, and continuous deployment (the two “CDs” are different), describe a pipeline and its environments.

Guide≈ 19 min readPartly checkedPartial checkThe main facts were checked by searching the cited sources. The items below still need checking before relying on them.To re-check
  • Abandon des catégories élite/haute/moyenne/faible dans le rapport DORA 2025 : confirmé seulement par une source secondaire (RedMonk), le texte garde sa mention « à vérifier ».
  • Disponibilité du YAML et des pipelines Release selon la version d'Azure DevOps Server : laissée en « à vérifier sur votre plateforme ».
Written with AI assistance; sources are cited at the bottom of the page. An error? Report it via clement13.net.
Reading
In brief
  • You will be able to precisely define continuous integration (CI), continuous delivery, and continuous deployment (the two “CDs” are different), and describe a pipeline and its environments.
  • You will know deployment strategies (recreate, rolling, blue/green, canary), feature flags, and the five DORA metrics (as of 2026-10).
  • You will understand what CI/CD brings to project management (visibility, risk, pace, evidence) — and above all its limits: costs, false sense of security, test coverage, pipeline debt, governance, regulation, legacy, organization.
  • The data-specific version is in 11 CI/CD for data: foundations, datamarts, pipelines, and reports; here, the common foundation.
On this page

Level: 🟢→🔴

1. Definitions: CI, continuous delivery, continuous deployment#

🟢 Novice — three concepts often confused#

Concept Definition What is automatic What remains human
Continuous integration (CI) Each team member integrates their work into the shared branch frequently (at least daily); each integration triggers an automated build and tests Compilation, tests, analysis Fix quickly if it's red
Continuous delivery (continuous delivery) The product is always in a releasable state; going to production is possible at any time with a simple action Build, tests, packaging, deployment to preproduction The decision to go to production (button)
Continuous deployment (continuous deployment) Any change that passes the pipeline is automatically deployed to production Everything, up to production Nothing at deployment time; responsibility is upstream (tests, flags, monitoring)
⚠️ Pitfall

Symptom: people announce “we do CI/CD” when they only have a nightly build. Cause: confusion between build automation and continuous integration (which is first and foremost a team discipline: integrate often, keep the main branch green). Remedy: measure branch lifespan and integration frequency, not the presence of a tool.

Historically, continuous integration was popularized by Extreme Programming (1990s-2000s); the book Continuous Delivery (Humble and Farley, 2010) formalized the deployment pipeline. These references are solid; keep only the ideas: small batches, fast feedback, everything automated and reproducible.

🟡 Practical — the rule of three “everything”#

A healthy CI/CD follows three principles:

  1. Everything is versioned: code, build scripts, configuration, pipeline definition, database scripts.
  2. Everything is reproducible: an artifact is built only once then promoted from environment to environment (build once, deploy many); you do not recompile for production.
  3. Everything is traceable: from production, you can trace back to the commit, the request, and the person who approved.
✅ Good practice

Ban “manual” hotfixes in production. If a manual action is unavoidable, write it into a versioned script next time. Every manual exception is reproducibility debt.

🔴 Expert — CI: what automation does not guarantee#

Continuous integration reduces integration risk but does not rule out design errors. A “green” branch means: the existing tests pass. It says nothing about the quality of those tests. The three real CI conditions:

  • a main branch that is always deployable (if it breaks, everything stops to fix it: “stop the line”);
  • a fast build (ideally under 10 minutes for essential feedback; indicative order of magnitude);
  • short-lived branches (a few hours to 2 days) or trunk-based development (trunk-based development) — see Branching Strategies.

2. Anatomy of a pipeline#

🟢 Novice — the pipeline as a chain of checks#

A pipeline is a sequence of automated steps that turns a code change into delivered software, with checks at each step. It fails early and fast: lowest-cost checks first.

CommitBuildUnittestsStaticanalysisPackageversioned artifactDeployDEVIntegrationtestsDeployTEST / ACCEPTANCE TESTINGFunctional testsacceptance testingPossibleapprovalDeployPREPRODRegressionand performanceDeployPRODPost-deploymentchecksMonitoring
Hover over or tap an element to read its details.

🟡 Practical — pipeline definition “as code”#

Generic example in YAML (Azure Pipelines-style syntax, adapt as needed):

trigger:
  branches:
    include: [ main ]
pr:
  branches:
    include: [ main ]

stages:
- stage: Build
  jobs:
  - job: build_test
    pool: { vmImage: windows-latest }
    steps:
    - script: dotnet build --configuration Release
    - script: dotnet test --no-build --logger trx
    - publish: $(Build.ArtifactStagingDirectory)
      artifact: drop

- stage: DeployTest
  dependsOn: Build
  jobs:
  - deployment: deploy_test
    environment: test
    strategy:
      runOnce:
        deploy:
          steps:
          - script: ./deploy.ps1 -Env Test

- stage: DeployProd
  dependsOn: DeployTest
  condition: succeeded()
  jobs:
  - deployment: deploy_prod
    environment: production    # approbation configurée sur l'environnement
    strategy:
      runOnce:
        deploy:
          steps:
          - script: ./deploy.ps1 -Env Prod

Principles: pipeline as code (the YAML is versioned with the product), environments with configured approvals, single artifact published at the Build stage and consumed by the next ones. Tool details: Azure DevOps Server (ex-TFS) in Depth.

💡 Expert tip

On Azure DevOps Server (ex-TFS), “classic” pipelines (graphical editor, Release) and YAML pipelines coexist depending on the version; the YAML option depends on the installed version (to be checked on your platform). Graphical definitions are not versionable like code: that's a reason to migrate to YAML.

🔴 Expert — designing a good pipeline#

Design criteria:

Criterion Target Why
First feedback speed minutes (order of magnitude: < 10 min) Beyond that, people stop waiting and stack changes
Determinism Same input, same output An intermittent (flaky) test destroys trust
Isolation Clean agents, pinned dependencies Avoids “it works on my machine”
Fail fast Low-cost checks first Saves compute time
Deployment idempotence Replayable without side effects Recovery after failure without making things worse
Observability Logs, durations, failure rate by step Measure the pipeline itself
Security Secrets out of code, least privilege, signing The pipeline is an attack surface (access to production)
⚠️ Pitfall

Symptom: builds fail “randomly,” teams rerun until green. Cause: non-deterministic tests (clock, order, shared resources, network). Remedy: quarantine unstable tests, measure their failure rate, fix them as defects — rerunning until green is the beginning of the end for CI.


3. Environments and promotion#

🟢 Novice — why multiple environments#

An environment is an isolated instance where the product runs: development, test/acceptance testing, preproduction, production. Each answers a different question.

Environment Question Data Who has access
Dev workstation / DEV “Does it work and compile?” Test datasets Developers
INTEGRATION / TEST “Do the components work together?” Synthetic/reduced data Team, automation
ACCEPTANCE TESTING (UAT) “Does the business side approve?” Realistic, often anonymized Key users
PREPROD “Will production go smoothly?” Close to production (volume, configuration) Team, operations
PROD — Real Users

🟡 Practical — parity and promotion#

The principle of parity: the more an environment resembles production (versions, configuration, volume, permissions), the more predictive testing is there. Typical gaps that break things: engine versions, compatibility level, service account permissions, data volume, time zone/language, regional settings.

Promotion moves the same artifact from one environment to another; what changes is the configuration (connection string, variables), injected at deployment time, never hardcoded in the artifact.

✅ Good practice

Document, in the repository, a table of known gaps between environments (“preprod has 10% of the volume,” “acceptance testing does not have connector X”). A written gap is a managed risk; an ignored gap is a production surprise.

🔴 Expert — ephemeral environments#

Environments created on demand (per pull request) then destroyed remove shared-environment queues and “configuration drift.” Condition: infrastructure defined as code (Bicep, Terraform, scripts) and provisionable test data. Cost: real (compute, licenses); must be weighed. For data, ephemeral setups are difficult (volume, anonymization) — see 11 CI/CD for data: foundations, datamarts, pipelines, and reports.


4. Deployment strategies#

🟢 Novice — four ways to replace a version#

Strategy Principle Advantage Disadvantage
Recreate Stop the old version, start the new one Simple Service interruption
Rolling Replace instances one by one No interruption, few extra resources Two versions coexist for a while; rollback is slow
Blue/green Two complete environments; switch traffic all at once Instant rollback (switch back) Doubles infrastructure; the database remains the hard part
Canary Expose 1–5% of users first, then expand Detects defects early with a reduced blast radius Requires monitoring and routing

🟡 Practical — choosing#

Is an outage of a few minutesacceptable?Recreatesimple, often sufficientfor an internal toolCan two versionscoexist?RollingCanary if risk is highand monitoring is strongBlue/green+ two-step migrationyesnoyesno: schema break,incompatibility
Hover over or tap an element to read its details.

The key is backward compatibility: if the new version tolerates the old data schema and the old version tolerates the new one, everything becomes possible (expand/contract: expand the schema, deploy, then contract once the old version is gone). This is the bridge to database deployment.

🔴 Expert — rollback, roll-forward, and irreversibility#

  • Rollback: return to the previous version. Easy for stateless code, impossible or dangerous as soon as data has been written in a new format.
  • Roll-forward: fix with a fast new version. Often safer than rollback on a stateful system, provided the pipeline is fast (time to fix becomes the measure of resilience).
  • Disable by flag: in many cases, the best “rollback” is to turn off a feature (next section).
⚠️ Pitfall

Symptom: “we can always roll back” is written in the plan, never tested. Cause: rollback is assumed, not rehearsed. Remedy: practice it in preproduction; explicitly document what is irreversible (destructive migrations, message sends, external writes).


5. Feature flags and deployment/delivery separation#

🟢 Novice — the switch#

A feature flag (or feature toggle) is a switch in code or configuration that enables or disables a feature without redeploying. It lets you deploy code (put it into production) without delivering it (making it visible to users): deployment becomes a technical non-event, delivery becomes a business decision.

🟡 Practical — uses and types#

Type Lifespan Use
Release flag Short Hide an unfinished feature on trunk
Experimentation flag Short A/B test, comparison
Operational flag (kill switch) Medium/long Turn off a costly or unstable feature
Permission flag Long Offering, profile, customer

Minimal example in PowerShell (reading a configuration flag):

$cfg = Get-Content .\config.json -Raw | ConvertFrom-Json
if ($cfg.features.nouveauCalculCouverture) {
    Invoke-NouveauCalcul
} else {
    Invoke-AncienCalcul
}

🔴 Expert — flag debt#

Each flag doubles the code paths to test. Rules: one owner, one removal date planned at creation, an inventory, regular cleanup; limit tested combinations. In data/BI, the equivalent is a versioned alternative measure or rule (configuration parameter selecting the calculation rule), with the same removal requirement — see 11 CI/CD for data: foundations, datamarts, pipelines, and reports.


6. DORA Metrics#

🟢 Novice — what we measure#

DORA (DevOps Research and Assessment) is a research program, taken over by Google Cloud, that has published an annual State of DevOps report since 2014. The book Accelerate (Forsgren, Humble, Kim, 2018) summarizes its findings: certain technical and organizational capabilities are correlated with better delivery performance and better organizational outcomes.

The delivery performance measures (as of 2026-10, after the 2024 evolution):

Metric Definition Dimension
Change lead time (change lead time) From commit to production deployment Throughput
Deployment frequency How often production deployments happen Throughput
Failed deployment recovery time (failed deployment recovery time) Time required to recover after a deployment that degraded production Throughput
Change fail rate (change fail rate) Share of deployments that cause a production failure Stability
Deployment rework rate (deployment rework rate) Share of unplanned deployments forced by an incident Stability

Verification note: the 2024 report formalized five measures (the fifth, rework rate, is new); the former “MTTR” had already been renamed failed deployment recovery time in 2023, and DORA now classifies it under throughput, alongside change lead time and deployment frequency. The 2025 report, focused on AI-assisted development, dropped the old “elite/high/medium/low” categories in favor of team profiles (archetypes), and concludes that AI is correlated with better throughput but still with more instability (as of 2026-10; cross-checked via web research, secondary sources — to be verified against DORA publications before citing a figure).

🟡 Practical — how to measure them without getting it wrong#

  • Data source: the repository (commits, merges), the pipeline (deployments), the incident management system. Define “deployment” and “failure” once for the whole team.
  • Use as a team thermometer, never as an individual target or for comparison between teams in different contexts.
  • Read as trends and in pairs (throughput and stability): increasing frequency with increasing failure rate is not a win.
⚠️ Pitfall

Symptom: deployment frequency explodes, incidents do too. Cause: metric misuse (Goodhart’s law: when a measure becomes a target, it stops being a good measure); artificially split deployments; or AI-generated volume without sufficient review. Remedy: track all five metrics together; review incidents; do not tie them to bonuses.

🔴 Expert — beyond DORA#

DORA measures flow to production, not value. Fast flow of useless features is a bad outcome. It should be complemented with: delivered value (adoption, usage), perceived quality, team health, and for data: freshness, reliability (see 10 Project Metrics and Reporting). For a data project with infrequent production releases (monthly kit delivery), frequency remains naturally low: focus instead on lead time and failure rate. The SPACE framework (Forsgren et al., 2021) reminds us that productivity has multiple dimensions.


7. What CI/CD Brings to Project Management#

🟢 Novice — not just a technical matter#

CI/CD changes management, not just tooling:

Contribution Mechanism Effect on steering
Visibility Product status is readable at all times (green/red, deployed version) Less unverified “almost done”; progress is a fact
Risk reduction Small batches, frequent, reproducible deployments Delivery risk is no longer concentrated in one big-bang release
Cadence The cost of a release tends toward zero You can release every iteration, or even more often
Feedback Fast business feedback on real outcomes Less gap between what is requested and what is expected
Evidence Logs, test results, approvals are traceable Feeds audit, acceptance testing, governance
Knowledge transfer Deployment is a script, not tacit knowledge Less dependence on one person

🟡 Practical — the link with methods#

🧪 Example

A BI team delivers an installation kit every month, with 2 to 3 days of “integration” before delivery to assemble contributions. After implementing continuous integration of scripts on an acceptance testing database (clean install on each merge), the assembly phase drops to a few hours: it is no longer a phase, it is a check. Real gain: the delivery date becomes predictable, and acceptance testing focuses on functional behavior rather than installation errors. (Illustrative order of magnitude, not a measurement.)

🔴 Expert — “delivering” and “deploying to production” are not synonyms#

In a B2B context with clients on fixed versions or client-installed kits, teams can deliver continuously (a kit always ready) but not deploy continuously at client sites: installation cadence is driven by the client. CI/CD then provides artifact quality and traceability, not production frequency. This is a very common case, poorly covered by SaaS-centered DevOps literature.


8. The limits of CI/CD#

🟢 Novice — what automation does not do#

CI/CD is an amplifier: it makes what is good and what is bad faster. It does not create quality; it executes and measures it. The limits below are reasons not to expect too much from it, not reasons not to adopt it.

🟡 Practical — eight limits to know#

Limit Description Symptom Countermeasure
Costs Setup, build agents, licenses, maintenance, training, compute time “Tooling” project that delivers nothing to the business; rising cloud bill Start minimal, measure return (time saved, incidents avoided), make trade-offs for ephemeral resources
False sense of security “It passed green, so it’s fine” Production logic defect despite a green pipeline Remind everyone that green = “existing tests pass”; human review for risk; production monitoring
Test coverage A pipeline is only as good as its tests; line coverage does not measure relevance 90% coverage but recurring business bugs Risk- and business rule-oriented tests; mutation testing, test review; do not target a percentage alone
Pipeline debt Copy-pasted pipelines, unmaintained scripts, frozen agent versions No one dares touch the pipeline; builds get slower and slower Treat the pipeline like a product: owner, refactoring, shared templates
Governance Who can change the pipeline? Who approves? Separation of duties? Workarounds, excessive permissions, plain-text secrets Least privilege, pipeline reviews, environment approvals, logging
Regulation Separation of duties, validation, traceability (finance, healthcare, regulated sectors, GDPR) Audit that rejects automatic deployment Tracked approvals, evidence generated by the pipeline, controlled data scopes
Legacy systems Monoliths without tests, databases without scripts, manual deployments, implicit dependencies “We can’t automate it, it depends on stuff on a server” Incremental approach: first script deployment, then test what is riskiest (characterization tests)
Organization Silos between dev, operations, business; lack of skills; culture of fear Ghost pipeline, extra manual acceptance testing, “DevOps = one person” Shared responsibility, training, sponsor, small visible wins

🔴 Expert — limits in depth#

False sense of security and acceleration risk. Delivering faster increases the amount of changes in flight; if incident detection and correction capacity do not keep up, instability rises. Recent DORA work on AI points in this direction: higher throughput, stability not automatically improved (as of 2026-10, see section 6). Practical conclusion: the more you accelerate, the more serious monitoring and testing must be.

Test coverage: the real problem is relevance. Four levels, from least to most useful:

  1. line coverage (easy to inflate);
  2. branch coverage;
  3. business rule coverage (each rule has at least one named test);
  4. mutation tests (code is altered, tests must fail).

Pipeline debt. Measurable symptoms: pipeline duration doubles with no scope change; “infrastructure” failure rate (agent, network) rises; number of ownerless scripts. A pipeline is code: it is reviewed, tested (on a sandbox project), and versioned.

Governance and regulation. The pipeline concentrates significant power: it has permission to deploy to production. It is an attack target (software supply chain). Measures: secrets in a vault, short-lived tokens, isolated agents, two-person approval for production, retained audit logs. In a regulated context, CI/CD is an evidence asset (everything is traceable) as much as a constraint — provided it was designed with audit in mind.

Legacy systems. Pragmatic order: (1) put all code and scripts under version control; (2) script deployment (even if it is a manual script at first); (3) build a reproducible build; (4) add characterization tests (freeze current behavior, even if it is “bad”) on risk areas; (5) automate promotion. Trying to redo everything at once is the best way to deliver nothing.

Organization. CI/CD fails first for human reasons: teams that do not integrate often, operations responsibility elsewhere, business acceptance testing that does not want automation, fear of change. An excellent pipeline in a fear-based organization gets bypassed.

⚠️ Pitfall

Symptom: the pipeline is green but the team still does full manual acceptance testing “for safety,” and no one knows what automation is for anymore. Cause: trust not established; pipeline evidence not readable by the business. Remedy: make evidence readable (test reports in business language), gradually reduce manual acceptance testing based on explicit criteria.

💡 Expert tip

Measure the cost of non-automation as much as the cost of automation: monthly hours spent on manual deployments, fixing deployment errors, waiting for key people. This makes opportunity cost calculations honest.


9. Implementing: a realistic path#

🟡 Practical — a five-step path#

Step Goal Verifiable deliverable Typical duration (order of magnitude)
0. Foundations Everything under version control, protected main branch Single repository, naming conventions a few days
1. Reproducible build An automatically triggered build, versioned artifact Green pipeline on every merge 1 to 2 weeks
2. Automated tests A core set of tests on risky rules Tests in the pipeline, blocking failure ongoing, 1 to 3 months for an initial core
3. Automated deployment to acceptance testing Scripted install on a test environment Deployment without manual action 2 to 6 weeks
4. Controlled promotion to production Approvals, evidence, rollback rehearsed Deployment log, tested rollback plan 1 to 3 months
5. Optimization Flags, progressive deployments, DORA measurement Dashboard, quarterly review ongoing
✅ Good practice

Each step must deliver value on its own. If step 2 is abandoned after six months, step 1 should already have improved the team’s daily work.

The matrix 05 Continuous Integration and Continuous Delivery and 06 Deployment and Operations provide verifiable milestones to position the team.


10. Practice maturity ratings#

Expert assessments, contextual (team of 4 to 10 people, internal or B2B product, Microsoft platform). See RATING. The ratings express the value delivered by the practice at reasonable effort and its ecosystem maturity.

Practice Value Implementation effort Tool maturity Note
Version control for everything 5/5 1/5 5/5 Prerequisite for everything else
Automated build 5/5 2/5 5/5 Nearly universal
Automated unit tests 4/5 3/5 5/5 Value depends on testable domain
Static analysis 3/5 2/5 4/5 Noise must be calibrated
Scripted deployment to acceptance testing 5/5 3/5 4/5 Immediate gain on installation errors
Approvals in the pipeline 4/5 2/5 4/5 Evidence and governance
Ephemeral environments 3/5 4/5 3/5 Costly without infrastructure as code
Canary/blue-green 3/5 4/5 4/5 Relevant for high-traffic services
Feature flags 4/5 3/5 4/5 Watch for debt
DORA metrics 3/5 2/5 3/5 Useful for trends, can be gamed
Continuous deployment to production 3/5 4/5 4/5 Rarely relevant in client delivery by release packages
Automatic rollback 2/5 4/5 3/5 Illusory as soon as data is involved

11. AI contribution#

Use case Gain Risk Maturity Prerequisites Safeguards
Draft / comment a pipeline file (YAML) 4/5 3/5 4/5 Target pipeline template Review, run on sandbox project
Diagnose a build failure from logs 4/5 2/5 4/5 Logs without secrets Mask secrets and personal data
Suggest unit tests 3/5 3/5 4/5 Readable code, known rules Verify relevance: a generated test that reflects current code also freezes its bugs
Draft release notes 4/5 2/5 4/5 List of changes Business review
Detect pipeline anomalies 2/5 3/5 2/5 Metrics history Human decides
🤖 AI

An assistant increases the volume of code produced; without stronger reviews and tests, it also increases instability (see section 6). CI/CD then becomes AI’s safety net, which makes its safeguards more important, not less. Details: 12 AI in Service of Project Management (General Then Data).

Example prompt: “Here is the log of a pipeline failing at the deployment step (secrets masked). List the 3 most likely causes, ranked by probability, and for each one, the check to perform and the corresponding command.”


12. See also#

✻ Written by Claude Sonnet 5.5