A pipeline is a machine you can read
For most of software's history a release was a person. Someone built the app on their own laptop, copied the files onto a server late on a Friday, ran a few commands from memory, and hoped — and when it broke at eleven, only that person knew what had actually been done, and often not even them. That person is a single point of failure who goes on holiday, forgets a step, and is careful right up until the one night they are not. A pipeline replaces them with a machine you can read: a defined sequence — a change arrives, the code is built, the build is tested, the result is deployed — that runs the same way every time, writes down exactly what it did, and will not skip the step that matters because it is late and everyone wants to go home.
You have built one of these before. In Classes Twenty-Two through Twenty-Four you wrote real pipelines with GitHub Actions, and this part does not assume you have forgotten that — it assumes you never learned why the pieces are shaped the way they are. So it teaches the fundamentals from the ground up, platform-neutral, before any specific tool's dialect.1 The reason is plain: the concepts underneath — the trigger, the build, the tests, the deploy — belong to no vendor. Learn them as a shape and you can walk up to any pipeline, in any tool, on your first morning at a new job and read what it does. That fluency is the thing a team most needs a cloud engineer to own, because the pipeline is the road every change in the company travels on, and the person who owns the road is trusted with production.
A release you can't repeat is luck.
The anatomy every pipeline shares
Strip away the logos and every pipeline is the same four-part shape, read left to right. A trigger starts it — most often a commit pushed to a branch, sometimes a pull request, a schedule, or a person pressing a button. The build turns your source code into the actual runnable thing: it compiles, bundles, or packages the code into an image or an archive, and it does this once, so the exact thing you tested is the exact thing you ship. The tests run against that build and act as a gate: if they fail, the pipeline stops and nothing goes further, which is the whole point — the machine says no so a tired human does not have to. And the deploy takes the tested build and places it where it does its job, into an environment, commonly with a human approval standing in front of production.
Those four are not steps someone invented for one tool; they are the irreducible logic of getting a change safely from a keyboard to a customer. Learn to see them and any pipeline becomes legible — you can look at an unfamiliar one and ask, of each line, which of the four is this, and is anything missing? A pipeline with a build and a deploy but no test between them is not a fast pipeline; it is an unguarded one, and the gap is exactly where a broken change walks straight into production. Draw the shape once by hand and it stops being a list to memorise and becomes a thing you can reason with.
Three words that get confused daily
People say “CI/CD” as one word, but it hides three separate ideas, and being sloppy about which one you mean is how teams talk past each other in planning meetings. The first is continuous integration. The second is continuous delivery. The third — spelled almost identically to the second and meaning something meaningfully different — is continuous deployment. The pipeline is the machine that makes all three affordable; which of them you are actually doing is a decision about where the human stands.
- CI / CD
- Continuous integration is the habit of merging every change into one shared main line often — several times a day — with each merge automatically built and tested, so that two people's work colliding is caught in minutes rather than discovered at the end of a quarter. Continuous delivery is the discipline of keeping that tested build always in a releasable state, so a deploy to production is a decision a human can make on demand, not a scramble to assemble.
The distinction the industry blurs most is the last two, so hold it firmly: continuous delivery keeps every good build ready to ship and leaves the final push to production as a human decision — a named person clicks approve. Continuous deployment removes that click: every change that passes the whole pipeline goes to production automatically, with no human gate at all. Deployment is delivery with the last hand-brake released — powerful, and appropriate only when your tests are trustworthy enough to be the sole thing standing between a merge and a customer.2
| Practice | What it automates | Reaches production… |
|---|---|---|
| Continuous integration | Merge every change to a shared main line; build and test each merge automatically | Not on its own — CI stops at “the build is green” |
| Continuous delivery | Everything CI does, plus keeping every good build packaged and ready to release | On demand, when a person approves the deploy |
| Continuous deployment | Everything delivery does, plus the production deploy itself | Automatically, with no human gate — the tests are the gate |
Notice that each practice contains the one before it: you cannot deliver continuously without integrating continuously first, and you have no business deploying continuously until your delivery is boringly reliable. The confusion is not academic. A manager who says “let's do continuous deployment” while the test suite is thin is asking to remove the last human check from a machine that cannot yet be trusted to notice a broken change — and knowing the difference between the two CDs is exactly what lets you say so.
Why the machine pays for itself
The case for a pipeline is not that automation is tidy; it is that the manual alternative has costs that only arrive on the worst day. Start with feedback speed. When every merge is built and tested automatically, a mistake surfaces in minutes, while the change is small and the person who made it still remembers what they did. When integration is left to a human at the end of a milestone, the same mistake surfaces weeks later, tangled up with a hundred other changes, and the hunt for which one broke things can burn a day of an expensive engineer's time — a day that a green-or-red build would have saved outright.
Fast feedback quietly changes behaviour, and this is where the real money is. If integrating is cheap and instant, people merge small and often; if it is slow and painful, they hoard changes on long-lived branches and merge in dreaded big-bang events. Small merges are easier to review, easier to test, and — the part that matters at three in the morning — trivial to roll back, because a ten-line change that broke production is a ten-line change to revert. A pipeline does not just move work faster; it steers a whole team toward the habits that make an outage a footnote instead of a headline.
And then there is the deploy nobody wants to talk about: the manual one that breaks on a Friday. A human copying files onto a server by hand at the end of the week is not saving time — they are borrowing it, at interest, against the night the copy goes wrong. There is no record of what changed, no test standing between the mistake and the customer, and no clean way back; the fix is a person retracing steps from memory while revenue burns and everyone who could help has gone home. Every one of those failures is a decision a pipeline makes for you, the same way, every single time. That reliability is not a luxury feature. It is the difference between an engineer a team trusts with production and one it does not — and that trust is, in the end, the thing you are paid for.
The estate you are about to inherit
Fundamentals are worth learning because the first thing you meet on the job is rarely a blank page — it is someone else's machinery, working well enough that no one has questioned it in years. The skill this part gives you is not writing a pipeline from scratch; it is being able to look at what already exists, name the four boxes it has, and see the one it is missing. That reading skill is what turns a decade-old manual habit into a problem you can actually describe out loud — and the case file below is exactly that first encounter.
Basecamp's warehouse ships by hand on a Friday night
Campux has bought a smaller competitor — Basecamp Outfitters, nine stores, one warehouse system the whole business now leans on — and inherited its Azure DevOps organisation along with it: thirty-one pipelines that have shipped reliably since 2019, and, sitting underneath everything, a single subscription-scoped service connection named azure-prod that expires in five weeks. But the deploy that matters most has no pipeline at all. The warehouse system — the one the whole acquired business runs on — is released the way software was released before any of this existed: an engineer builds it, copies the output onto a server on Friday evening, runs a few commands from memory, and goes home hoping the phone stays quiet over the weekend.
You are not asked to rebuild it this week. You are asked to read it. Lay the Friday-night ritual against the four boxes of Figure 1 and the gaps name themselves. The trigger is a human deciding it is Friday. There is a build, but it happens on one person's machine and nowhere else can reproduce it. There is no test gate whatsoever — nothing stands between a bad build and the warehouse floor. And the deploy is a manual copy with no record of what changed and no way back if it breaks. Written down like that, the work of the whole track stops being vague “modernisation” and becomes a punch list: give this deploy a trigger, a reproducible build, a real test gate, and a recorded deploy — in that order. Naming the missing shape is the first, and most senior, move you make.
That is the posture the rest of Class Thirty-Nine is built on: read before you rebuild, and price the change before you make it. The following parts turn each of those four boxes into working machinery — how a pipeline is written as a file (39b), where it runs (39c), and eventually how the dangerous azure-prod secret is retired for good (39i). But all of it rests on what you can do already at the end of this part: look at any pipeline, or the absence of one, and say plainly which of the four boxes is there and which is missing.
Examination
Four drills, then two situations. Write your answer before you reveal the reasoning, or the exercise is worthless. Nothing is stored.
B — the value is repeatability and a record, not raw speed. The laptop deploy is sometimes genuinely faster on the day; what it cannot do is run identically next Tuesday when a different person does it, prove afterward what it actually ran, or refuse to skip the test step at eleven at night when everyone wants to go home. D is the seductive answer, and its flaw is the word "careful" — a person who is careful right up until the one Friday they are not is exactly the single point of failure a pipeline exists to remove, and that Friday is the outage. A invents a speed guarantee that does not hold; the manual copy is often quicker until it fails. C inverts the whole point: the pipeline is where tests run, not a licence to stop running them. A pipeline replaces a fragile person with a machine you can read.
A — the human at the production gate is the whole distinction. Continuous delivery keeps every good build releasable and leaves the final push to production as a human decision; continuous deployment removes that decision, so a passing pipeline ships to customers automatically. B inverts them, which is the exact confusion that bites in planning meetings — deployment is delivery with the last hand-brake released, not the other way round. C is wrong because CI stops at "the build is green"; it does not deploy anything, so a scenario that reaches production is past CI. D is the flattening this part exists to prevent: treating the two CDs as synonyms hides the single most consequential choice — whether a person still stands between a merge and a customer. Say "delivery keeps it ready, deployment lets it go" until the two stop blurring.
Triggers are plural, the build runs once, and the test is a gate. Those three are the load-bearing facts of this part: a trigger is any event that starts the run, building once means the tested artifact and the shipped artifact are the same bytes, and the test gate is the reason the whole thing is trustworthy — it stops a bad change before the deploy. The two rejects are the confusions to burn out. Continuous deployment is not automatically safer: removing the human gate is only wise when your tests are strong enough to be the gate, and on a thin suite it just removes the last thing that would have caught the break. And continuous delivery is not independent of CI — it contains it. You cannot keep every good build releasable if you are not integrating and testing every merge in the first place; deployment builds on delivery builds on integration, in that order.
# plan: a real pipeline for the warehouse deploy
1. Trigger: run automatically on every push to the
main branch.
2. Build: compile once on the agent and produce a
single artifact.
3. Deploy that artifact straight to production, then
run the tests against it to confirm it worked.
4. Keep a human approval in front of the production
deploy.
Line three — the test has to gate the deploy, not follow it. The whole reason the shape is trigger, build, test, deploy is that the test stands between a bad build and a customer; put the deploy first and the test becomes a post-mortem that runs after the damage is already live in production. This is not a small reordering — it is the difference between a pipeline and an expensive way to ship bugs quickly. The distractors are all sound practice dressed up as errors: triggering on every push to main is exactly how continuous integration works (A), building the artifact once so the tested bytes are the shipped bytes is correct and important (B), and a human approval in front of production is continuous delivery behaving properly, not a failure of automation (D). Fix line three by moving the test before the deploy, and the gate does its job.
A strong answer concedes before it argues. Six years without a failure is a genuine achievement, and the fastest way to lose this person is to imply their work was amateur. Start there and mean it: the reliability is real, and the pipeline is not an accusation — it is a way to make that reliability survive without depending on one person's memory and one person's Friday. Concede the fact, then move the conversation from "does it work" to "what happens the day it doesn't, or the day you are on holiday."
Name what the manual deploy is missing, in the language of the four boxes. There is no record — when something eventually goes wrong, no one can see what changed, so the fix is you retracing steps from memory at eleven at night. There is no test gate — nothing stands between a bad build and the warehouse floor except your care, which is exactly the thing that cannot be relied on forever. And the build lives on your machine alone, so if you are unreachable, the whole business's warehouse deploy is unreachable too. The pipeline does not replace your judgement; it writes it down so the estate is no longer one illness away from being unshippable.
Close by making them the owner, not the obstacle. The person who has done this deploy for six years knows more about its landmines than anyone, and the pipeline is where that knowledge gets encoded so it stops being tribal. Offer to build the first version together, lifting each manual step into a stage — their steps, made repeatable. That reframes the change from "we are automating you away" to "we are turning your six years of care into something the whole team can lean on," which is both the honest pitch and the one that gets a real pipeline built.
Answer the definition on the one axis that matters: the human. "Both keep every good build tested and ready to ship. The only difference is the last step. Continuous delivery leaves the push to production as a human decision — a named person approves. Continuous deployment removes that decision, so every change that passes the pipeline goes to customers automatically." Stating it as a single axis — where the human stands — shows you understand the distinction rather than having memorised two paragraphs that sound alike.
Then let the context choose, and say why. "For a payments system I'd start with continuous delivery — a human approval before production. Not because automation is untrustworthy in principle, but because continuous deployment is only safe when the tests are strong enough to be the sole gate, and on a payments system the cost of a bad change reaching customers is high enough that I want a person confirming until the test suite has earned that trust." Naming the precondition — trustworthy tests — is what separates a real answer from a slogan.
Close by showing it is a direction, not a dogma. "Continuous deployment isn't the goal to rush to; it's what you graduate into once delivery is boringly reliable and the tests genuinely catch what matters. I'd get there deliberately — invest in the test gate first, watch how often it would have caught a real problem, and remove the human click only when the evidence says the machine can hold that responsibility." That reframes you from someone reciting buzzwords to an engineer who knows that the human gate is a control you keep until you have earned the right to give it up.
Five things worth carrying out of this part
- A pipeline is a machine you can read: a defined sequence that runs the same way every time, records what it did, and will not skip the step that matters because it is late. The value is repeatability and a record, not raw speed.
- Every pipeline is one four-box shape read left to right: trigger, build, test, deploy. Learn to see it and any pipeline becomes legible — you can ask of each line which box it is, and whether one is missing.
- The test stage is a gate. If it fails, the pipeline stops and the deploy does not run. A pipeline that builds and deploys without a test between them only looks finished.
- CI merges every change often and tests it; continuous delivery keeps every good build ready to ship with a human approving the production deploy; continuous deployment removes that human. Each contains the one before it.
- The skill this part gives you is reading, not just building: look at an existing deploy — even a manual Friday-night one — lay it against the four boxes, and name the box it is missing. That is the first, most senior move.
- This part stays deliberately platform-neutral: trigger, build, test, and deploy are the field's vocabulary, not any single tool's. The specific nouns Azure DevOps gives these boxes — stages, jobs, steps and tasks, and the azure-pipelines.yml file itself — arrive in 39b, and nothing here should be read as a claim about one product's exact feature names, which change more often than the underlying shape does. ↩
- The three-way split — integration, delivery, deployment — is the widely taught distinction, but usage in the wild is loose: plenty of teams say “CI/CD” or even “continuous deployment” for what is really continuous delivery with a manual approval in front of production. Do not correct people reflexively. Treat these definitions as the standard reference points, and in any given conversation resolve the ambiguity by asking the one question that actually settles it — is there still a human between a merge and a customer, or not. ↩