Skip to content
Codeloom
CI/CD

What Is CI/CD? Continuous Integration and Delivery Explained

A clear introduction to CI/CD — what continuous integration and continuous delivery actually mean, why teams adopt them, and the tools that implement them in practice.

·9 min read · By Codeloom
Beginner 10 min read

What you'll learn

  • What continuous integration (CI) actually does on every push
  • What continuous delivery and continuous deployment mean — and how they differ
  • Why teams adopt CI/CD: speed, safety, and shared confidence
  • The common tools you will see: GitHub Actions, GitLab CI, CircleCI, Jenkins
  • The maturity spectrum from manual deploys to fully automated pipelines

Prerequisites

CI/CD is one of those acronyms that sounds heavier than it is. Strip away the jargon and it describes a simple idea: every time someone pushes code, a machine builds it, tests it, and — if everything passes — moves it closer to production, automatically. This post explains what CI and CD really mean, how they fit together, and why they have become a baseline expectation on modern software teams.

The problem CI/CD solves

Before CI/CD, the typical software release looked like this. Developers worked on their branches for days or weeks. At some point, someone declared “release day,” merged everything together, and discovered that two features touched the same file in incompatible ways. A panicked few hours later, a human ran the build, copied artifacts onto a server, and crossed their fingers.

That worked when releases happened once a quarter. It does not work when teams ship multiple times a day.

CI/CD replaces the manual ceremony with automation that runs on every change. The build step, the test step, the package step, and (sometimes) the deploy step all happen without anyone clicking a button. The result is that integration problems surface in minutes, not weeks, and deployments stop being events.

What CI means

Continuous integration is the practice of merging code changes into a shared branch frequently — usually many times a day — and verifying each merge with an automated build and test run.

In concrete terms, a CI system watches your repository. When you push a commit or open a pull request, it does roughly this:

# 1. Check out the code
git clone <repo>

# 2. Install dependencies in a clean environment
npm install

# 3. Run the build
npm run build

# 4. Run the tests
npm test

# 5. Report success or failure back to the pull request

If anything fails, the pull request is marked red. If everything passes, it is marked green and ready to merge. The whole run usually takes between one and ten minutes.

The point is not the specific commands — they vary by language — but the discipline. Every change is verified the same way, in a clean environment, before it touches main. No more “works on my machine.”

What CD means (twice)

CD is where the acronym gets confusing, because it stands for two related but distinct things.

Continuous delivery means that every change which passes CI is automatically packaged and made ready to deploy at any time. A human still presses a button to release to production, but the artifact is built, tested, and waiting. Releases become cheap and routine.

Continuous deployment goes one step further: every change that passes CI is automatically released to production, with no human in the loop. This requires high test coverage and good observability, but it eliminates the gap between “code is ready” and “users have it.”

Most teams start with continuous delivery and graduate to continuous deployment when their tests and monitoring earn enough trust. Both are valid; the right one depends on how costly an incorrect deploy would be.

Why teams adopt CI/CD

Three reasons come up over and over.

Faster feedback. When CI runs in minutes, you find out about a broken build while the change is still fresh in your head. Without CI, the same bug might be discovered two weeks later, by someone else, with no context.

Smaller, safer changes. Once integration is cheap, it makes sense to merge tiny changes often. Small changes are easier to review, easier to revert, and far less risky than the quarterly mega-merge.

Shared confidence. When the test suite has run on every commit, every developer can trust main is in a working state. New people can ship on day one. The release process stops being a single person’s tribal knowledge.

A fourth, less obvious benefit: CI/CD forces you to automate the boring parts. Once your tests, builds, and deploys are scripts a machine runs, you stop relying on memory and Post-its.

The common tools

You do not need to know every CI/CD tool. You do need to recognise the names.

GitHub Actions. Built into GitHub. You add a YAML file under .github/workflows/ and GitHub runs it on the triggers you specify. Free for public repos, generous free tier for private. The easiest starting point if your code lives on GitHub — covered in the next post.

GitLab CI. Built into GitLab. Similar idea: a .gitlab-ci.yml file at the repository root describes the pipeline. Tight integration with GitLab’s merge requests and container registry.

CircleCI. A SaaS CI platform that works with GitHub, GitLab, and Bitbucket. Known for fast builds and good caching primitives. Configuration lives in .circleci/config.yml.

Jenkins. The veteran. Self-hosted, plugin-based, infinitely flexible, and a fair amount of work to maintain. Still common in larger and older organisations.

Others worth knowing the names of. Travis CI, Buildkite, Drone, TeamCity, Argo CD (deployment specifically), Spinnaker. You will see them in job postings.

The good news: the concepts transfer between all of them. Once you understand triggers, jobs, steps, and artifacts, learning a new tool is mostly learning its YAML dialect.

Try it yourself. Pick a repository you already have on GitHub. Look in its root for .github/workflows/. If there is anything there, open one of the YAML files and read it top to bottom. Even without knowing the syntax, you will recognise the shape: a trigger, a job, a list of steps. That is CI in one file.

A typical pipeline, end to end

A mature CI/CD pipeline for a small web application might do this on every push to main:

  1. Check out the source code.
  2. Install dependencies (often with a cache to avoid downloading them every time).
  3. Lint the code to catch style issues.
  4. Run unit tests.
  5. Build the production bundle.
  6. Run integration tests against the built artifact.
  7. Build a container image and push it to a registry.
  8. Deploy the image to a staging environment.
  9. Run smoke tests against staging.
  10. Promote the image to production (automatically or with a manual approval).

Each step is independent. If linting fails, the rest of the pipeline does not run. If everything passes, a new version is live in minutes. If something breaks, you see exactly which step failed and why.

You do not need all ten steps on day one. Start with install, build, test. Add more as the project grows.

The maturity spectrum

CI/CD is not a binary. Teams sit somewhere along a spectrum that looks roughly like this.

Level 0 — Manual everything. Someone runs the build on their laptop, copies a zip file to a server, restarts a service. No automation. Common for very small projects.

Level 1 — CI only. Tests run automatically on every push. Deploys are still manual, but at least the codebase is verified continuously.

Level 2 — Continuous delivery. Every passing commit produces a deployable artifact. A human presses a button to ship to production. Releases happen weekly or daily.

Level 3 — Continuous deployment. Every passing commit is automatically released. Releases happen many times a day. Requires strong tests, monitoring, and the ability to roll back quickly.

Level 4 — Progressive delivery. New versions roll out gradually — to 1% of users, then 10%, then 100% — with automatic rollback if metrics degrade. Used at large scale and by teams shipping risky changes.

Most small projects sit comfortably at Level 1 or 2 and stay there. That is fine. Climb the ladder only when the cost of manual work outweighs the cost of automation.

Try it yourself. For a project you work on, write down its current level on the spectrum above. Then write down one concrete change that would move it up by one step. That is your next CI/CD task — and it is almost always smaller than you think.

What CI/CD is not

A few clarifications that save confusion later.

CI/CD is not a replacement for tests. A green pipeline is only as meaningful as the tests it runs. A repo with no tests and a working build is not safer because it has CI.

CI/CD is not magic deployment. The pipeline still needs to know how to deploy — to a server, to a container platform, to a serverless runtime. That knowledge lives in scripts you write.

CI/CD is not free. Build minutes cost money on hosted services, and self-hosted runners cost time. The investment usually pays back many times over, but it is real.

CI/CD is not just for big teams. Even a solo developer benefits. CI catches stupid mistakes before they reach main, and CD removes the temptation to skip deploys because they are annoying.

Recap

You now know:

  • Continuous integration runs an automated build and test on every push, catching breakage in minutes
  • Continuous delivery keeps a deployable artifact ready at all times; continuous deployment ships it automatically
  • The common tools are GitHub Actions, GitLab CI, CircleCI, and Jenkins — the concepts transfer between them
  • A typical pipeline runs install, lint, test, build, package, and deploy as independent steps
  • Teams sit on a maturity spectrum from manual deploys to progressive rollouts; pick the right level for your project

Next steps

The next post is hands-on: you will write your first GitHub Actions workflow from scratch, run it on a push, and add a status badge to your README. By the end, your repository will have real CI running on every change.

→ Next: GitHub Actions: Your First Workflow

Questions or feedback? Email codeloomdevv@gmail.com.