Exam Blueprint · CDP · Ch. 1–2 of 9 · Foundations & the Toolchain

DevOps Foundations & the CDP Toolchain

Nine chapters make up this course's CDP exam blueprint, and this page is chapters 1 and 2 combined. It isn't new theory — it's the fluency gate every later chapter assumes you've already cleared. If you can't produce a blue-green rollout from memory, tell continuous delivery from continuous deployment in one breath, or write a five-line Ansible playbook without searching for the syntax, that's what this page is for. It is deliberately not a re-teach of What is DevSecOps? — read that first for the cultural case; come here for the vocabulary and the tool commands your hands need to already produce without thinking.

☺ Explain it like I'm 10

Before you can write a story, you need the alphabet down cold — you don't sound out every letter while writing a sentence, you just write. This page is the alphabet: the words (CAMS, CI/CD, blue-green) and the tools (Git, Docker, Ansible) you need to already have automatic, before the graded challenges ask you to write the story.

🦉Your host for this topic: Professor Owl — before any graded challenge, someone has to confirm the baseline vocabulary and toolchain are already automatic, not something you're learning for the first time under a clock.

Why chapters 1–2 exist: a fluency gate, not new material

☺ Like you're 10: This chapter doesn't teach a new trick — it checks that the tricks you already know are fast enough to use without stopping to think.

The Certified DevSecOps Professional (CDP) is a hands-on, task-based exam — five live challenges against a real environment, no multiple choice, and no chatbot or AI assistant allowed during the window. That format changes what "studying" means for the first two chapters of this blueprint. Chapters 3 through 9 build new, gradable skill — writing a policy-as-code rule, triaging a real CVE, standing up compliance evidence. Chapters 1 and 2 build nothing new; they establish that the vocabulary and the commands underneath all of that are already reflexes, not lookups. A candidate who has to pause mid-challenge to remember what maxUnavailable does, or to search for Ansible's module syntax, is losing exam time to material this page exists to make automatic beforehand.

Two things live here as a result: the workflow vocabulary the exam uses without defining it (CAMS, CI/CD terms, deployment strategies), and the six tool categories the exam assumes your hands already know. Pair this page with the CDP study plan for where it sits in a full prep schedule, and the CDP exam guide for exam-day logistics.

CAMS, cold: the vocabulary every later chapter assumes

☺ Like you're 10: Four words describe how a healthy team works together — you need to recognize all four on sight, not puzzle them out.

What is DevSecOps? already covered why CAMS — Culture, Automation, Measurement, Sharing, coined by John Willis and Damon Edwards, with Lean added later by Jez Humble to make CALMS — matters for security specifically. This page isn't repeating that case. It's confirming you can name all four cold, because chapters 3 onward use them as shorthand without re-explaining them every time.

LetterTermWhat the exam expects you to recognize instantly
CCultureShared ownership across dev, ops, and security — not separate teams with a handoff between them.
AAutomationRepeatable steps encoded as pipeline stages, not a runbook a person executes by hand each time.
MMeasurementContinuous tracking of delivery health — commonly the DORA four keys: deployment frequency, lead time for changes, change failure rate, and mean time to restore.
SSharingTooling, dashboards, and incident learnings cross team boundaries instead of living inside one team's private tooling.

The DORA metrics under "Measurement" are worth having cold on their own — a task-based exam is exactly the kind of setting where a challenge might ask you to identify which of the four a given pipeline change would improve, without spelling out "this is a DORA question."

CI/CD terminology the exam won't stop to define

☺ Like you're 10: "Keep merging small changes," "prove it's safe to ship," and "actually ship it automatically" are three different promises — mixing them up is the single most common vocabulary mistake in this space.

Three terms get used almost interchangeably in casual conversation and mean three specifically different things on an exam:

TermWhat "passing the pipeline" gets youGate before production
Continuous IntegrationEvery merge to trunk is built and automatically tested — CI stops at "the build is green."N/A — CI doesn't reach production at all.
Continuous DeliveryEvery change that passes the pipeline is proven deployable to production at any time.A human approval or a manual button push.
Continuous DeploymentEvery change that passes the pipeline is proven deployable to production.None — it ships automatically the moment the pipeline is green.

Underneath those three sits the anatomy of a pipeline itself, and a handful of terms attached to it: a trunk-based workflow (short-lived branches, frequent merges to main, feature flags hiding incomplete work behind a toggle instead of a long-lived branch) versus GitFlow (long-lived develop/release/hotfix branches) — trunk-based is what CI/CD-mature pipelines and this exam both assume, because GitFlow's long-lived branches are exactly what slow, painful integration looks like. An artifact repository (a container registry like GHCR or ECR, or a package registry like Artifactory or Nexus) stores the one immutable, versioned output of a build so every later stage — staging, then production — deploys the exact same bytes, never a rebuild. And promotion means moving that one artifact through environments (dev → staging → prod), not building it fresh at each stop.

# .github/workflows/ci.yml — trunk-based, with the CD gate made explicit
name: build-test-deploy
on:
  push:
    branches: [main]           # trunk-based: everything lands on main
  pull_request:
    branches: [main]

jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t app:${{ github.sha }} .
      - run: docker run --rm app:${{ github.sha }} pytest

  deploy-staging:
    needs: build-test
    runs-on: ubuntu-latest
    environment: staging        # no required reviewer — deploys automatically
    steps:
      - run: ./deploy.sh staging app:${{ github.sha }}

  deploy-prod:
    needs: deploy-staging
    runs-on: ubuntu-latest
    environment: production     # protected environment = a required reviewer
    steps:
      - run: ./deploy.sh production app:${{ github.sha }}

That environment: production line is the whole distinction made concrete: with a required reviewer configured on the production environment in the repo's settings, this is continuous delivery — every green build is provably deployable, but a human still presses go. Delete the reviewer requirement and the identical YAML becomes continuous deployment. Nothing about the pipeline's stages changes; only whether a human sits between "proven safe" and "live."

◆ Key idea

Continuous delivery and continuous deployment run the same pipeline. The only difference is whether a human approval sits between "this build is proven deployable" and "this build is live." If a challenge's grading criteria never mention a manual approval step, assume deployment, not delivery.

Deployment strategies: blue-green, canary, and rolling

☺ Like you're 10: All three answer the same two questions differently — how much of the new version do real users see right now, and how fast can you take it back?

Every deployment strategy is really an answer to two questions asked together: how much of the new version is exposed to real traffic at any given moment, and how fast can that exposure be reversed if it's broken. The three the exam expects you to distinguish on sight answer those questions very differently.

Blue-green — two full environments; the cutover is instant and total Router Blue · v1.0 — LIVE, 100% traffic Green · v1.1 — idle, health-checked rollback = flip back to Blue cutover: flip 0% → 100% at once Canary — a small slice of real traffic, watched, then widened Router Stable · v1.0 — 95% (majority) Canary · v1.1 — 5% → 25% → 100% widened in steps if metrics stay healthy auto-revert to 0% if error rate / latency breach a threshold Rolling update — old instances replaced in place, batch by batch replacement sweeps left → right, one batch at a time (maxSurge / maxUnavailable) v1.1 v1.1 v1.0 v1.0 v1.0 v1.0 old and new versions serve real traffic side by side for the whole rollout window Same question every row: how much new-version traffic is live right now, and how fast can it be undone?
DimensionBlue-greenCanaryRolling
Infra during rolloutA full duplicate environment running momentarily (roughly 2×)Base capacity plus a small canary poolNo duplicate — the same fleet, replaced in place
Traffic controlInstant, all-or-nothing cutover at the router/LBWeighted percentage split, widened in stepsImplicit — set by how many old vs. new instances are up
Rollback speedFastest — flip the router backFast — shift the weight back to 0%Slowest — roll the old version back out batch by batch
Blast radius if broken100% of users, immediately after cutoverLimited to the canary percentage, if caught in timePartial, but present for the entire rollout window
Typical mechanismDNS / load-balancer / router swapService mesh or ingress weighted routing; a progressive-delivery controller (e.g. Argo Rollouts, Flagger)Native to the orchestrator (e.g. a Kubernetes Deployment's RollingUpdate: maxSurge / maxUnavailable)
⚠ Watch out — the traps chapters 1–2 exist to close

Four mistakes account for most of the vocabulary slips at this level. First, treating continuous delivery and continuous deployment as synonyms — they differ by exactly one gate. Second, confusing canary with A/B testing: a canary is a risk-mitigation technique driven by system health metrics (error rate, latency), while A/B testing is a product-experimentation technique driven by business metrics (conversion, engagement) — the two can even share the same traffic-splitting infrastructure and still be answering completely different questions. Third, assuming a rolling update has zero blast radius because there's no dramatic cutover — old and new versions serve real production traffic side by side for the entire rollout window, which means both versions must be backward- and forward-compatible at the API and data layer, or the rollout itself becomes the incident. Fourth, and specific to this exam's format: none of this is partial credit for "I could look it up." No AI assistant is allowed during the window, so the fluency has to already be there before you sit down.

The baseline toolchain: six tools your hands already know

☺ Like you're 10: These aren't tools this course teaches from scratch — they're the ones you're expected to already reach for without reading the manual.

The CDP's live-environment format means the toolchain fluency bar is a command you can type, not a concept you can describe. This course covers several of these tools in depth elsewhere — for the security-specific ones, read the in-depth page; for the general DevOps ones (Git, Docker, a CI runner), the bar this page sets is the depth this course expects, because they're prerequisite skill rather than DevSecOps-specific material.

Tool categoryConcrete tool(s) the exam expectsThe fluency bar
Git platformGitHub, GitLab, or BitbucketOpen a PR/MR, read a protected-branch/required-status-check config, run git rebase or git log --oneline without pausing to think.
Container runtimeDockerWrite and read a multi-stage Dockerfile; docker build -t app:1.0 .; docker run --rm -p 8080:8080 app:1.0.
CI runnerGitHub Actions, GitLab CI, or JenkinsRead pipeline YAML (or a Jenkinsfile); know job vs. step vs. stage; wire a secret from the platform's own secret store into a job — see secrets management for why it never gets hardcoded instead.
DAST scannerOWASP ZAPzap-baseline.py -t <url> -r report.html for a fast passive pass; know when a full active scan is warranted instead — see SAST, DAST & SCA for the difference.
Config managementAnsibleWrite a playbook with idempotent tasks; run ansible-playbook -i inventory.ini site.yml.
Compliance as codeInSpecWrite a describe control; run inspec exec profile/ -t ssh://host --sudo against a target.

Two of those six deserve a real snippet, since "idempotent" and "compliance as code" are words candidates recognize far more often than they can produce on demand:

# site.yml — idempotent: running this a second time changes nothing
- hosts: web
  become: true
  tasks:
    - name: ensure nginx is installed
      apt: { name: nginx, state: present }
    - name: ensure nginx is running and enabled
      service: { name: nginx, state: started, enabled: true }
# controls/nginx_hardening.rb — InSpec: an assertion about system state, not a task that changes it
control 'nginx-01' do
  impact 1.0
  title 'nginx must not run as root'
  desc 'The worker process should drop privileges after startup.'
  describe file('/etc/nginx/nginx.conf') do
    its('content') { should_not match(/^user\s+root;/) }
  end
end

Notice the shape of the difference between those two: Ansible's playbook is imperative-ish but idempotent — it changes a system toward a state, safely, however many times it runs. InSpec's control is purely declarative and read-only — it asserts a state and reports pass/fail, changing nothing. Chapter 7 (Infrastructure as Code Hardening) and chapter 8 (Compliance as Code at Scale) build directly on that distinction — Ansible is how you enforce a hardened baseline, InSpec is how you prove it's still true later, and confusing the two roles is a fast way to lose exam-challenge time to the wrong tool.

🎬 At the Shift-Left Squad
🦉

Professor Owl: Two chapters, no new ideas — just the words and the tools every later chapter is going to assume you already reach for automatically.

🦊

Foxy: Okay, but "continuous delivery" and "continuous deployment" — I mix those up every single time. What's actually different?

🦉

Professor Owl: Delivery stops at "provably deployable" — a human still presses go. Deployment removes that person. Same pipeline, one fewer gate.

🦫

Benny: Fine, I've got Docker cold. Multi-stage build, tag it, push it — I could do it in my sleep.

🐢

Timmy: Then write me an Ansible playbook that installs nginx idempotently. Right now. No searching.

🦫

Benny: ...give me a second.

🐢

Timmy: That's exactly the second you won't have in the exam room. No chatbot, no tab to open. Chapters 1 and 2 exist so that second isn't a scramble.

That's the whole gate: vocabulary and tool commands, fast and automatic. Chapter 3 starts building graded skill on top of it — Secure SDLC Gates & the DevSecOps Maturity Model is next. If any command in the toolchain table above needed a second thought, drill it against the command & tool reference and the Know It Cold page before moving on, then check the fluency against Mock Exam · Set 1. Ready to apply it against a real pipeline instead of a page? The capstone lab track starts from the same baseline this page assumes.

✓ Checkpoint

1. Spell out what each letter in CAMS stands for, and name the concept Jez Humble added later to make it CALMS. 2. In one sentence each, what's the difference between continuous delivery and continuous deployment — and what single configuration change turns one into the other in the GitHub Actions example above? 3. Compare blue-green, canary, and rolling deployments on rollback speed and blast radius. 4. Why is a rolling update's blast radius not zero, even though there's no dramatic cutover moment? 5. Name the six tool categories this page says the exam assumes hands-on fluency with.

Check your answers
  1. Culture, Automation, Measurement, Sharing. Jez Humble later added Lean, making it CALMS.
  2. Continuous delivery means every change that passes the pipeline is proven deployable, but a human still approves the actual release; continuous deployment removes that approval and ships automatically. In the example, that's the required-reviewer setting on the production environment — remove it and the same YAML becomes continuous deployment.
  3. Blue-green has the fastest rollback (flip the router back) but the largest blast radius if something slips through (100% of users, all at once). Canary has a fast rollback (shift weight back to 0%) and a limited blast radius (bounded by the canary percentage, if caught in time). Rolling has the slowest rollback (old version must be rolled back out batch by batch) and a blast radius that's partial but present for the entire rollout window.
  4. Because old and new versions serve real production traffic side by side for the whole rollout window — some fraction of requests hit the new version the entire time replacement is happening, not just at one cutover instant, which means both versions must stay backward- and forward-compatible or the rollout itself becomes the incident.
  5. Git platform (GitHub/GitLab/Bitbucket), container runtime (Docker), CI runner (GitHub Actions/GitLab CI/Jenkins), DAST scanner (OWASP ZAP), config management (Ansible), and compliance as code (InSpec).