Skip to content

Guide

Continuous integration and delivery (CI/CD)

A CI/CD pipeline is not a luxury for big teams: it is what turns "let's hope it works" into "we know before we merge".

Last updated:

Abstract illustration of a continuous integration pipeline with stages and a deployment

CI (continuous integration) means automatically checking every change before integrating it. CD (continuous delivery or deployment) means getting that change into a real environment with no manual steps. Most teams gain more from good CI than from any other technical investment of the same cost.

What CI checks, and in what order

  1. Fastest first: formatting and lint. Fails in seconds and keeps noise out of the review.
  2. Compilation / type-check: if it does not build, nothing else matters.
  3. Unit tests: the bulk of the confidence, should take a few minutes.
  4. Integration and end-to-end tests: slower and more fragile; they go last and in parallel.
  5. Production artifact build: if it is prerendered or bundled, let it fail here and not on the server.

Run times matter more than they seem

If the pipeline takes 25 minutes, people stop waiting for it: they merge before it finishes, pile up changes and lose the cause-and-effect link between a commit and its failure. A reasonable target is a CI answer in under ten minutes. You get there with dependency caching, parallelisation and not repeating work between stages.

Gates before production

Between "CI passes" and "it is in production" it is worth adding checks that are not code: an approved review, database migrations reviewed separately, and a way to roll back in a minute. Deployment should be boring; if it produces adrenaline, automation is missing.

  • Reproducible deployment: the same artifact that was tested is the one that ships.
  • Fast rollback: relaunching the previous version cannot depend on rebuilding anything.
  • Post-deploy health: an automatic check that the service responds before the release is considered good.

Environments

At a minimum, an integration environment that resembles production (same services, anonymised data) where you test before releasing. Many teams avoid incidents just by having that environment and actually using it.

FAQ

What people ask us

Do I need CD if I already have CI?

It is not mandatory, but manual deployment is a recurring source of errors and of dependence on one person. Automating it usually pays off within a few weeks.

How long should the pipeline take?

Ideally under ten minutes for the answer that blocks a merge. The slowest tests can run in parallel or afterwards, without blocking.

GitHub Actions, GitLab CI, Jenkins...?

For most projects, the CI built into your code platform (Actions or GitLab CI) is enough and cheaper to maintain. Jenkins makes sense in organisations with very specific infrastructure needs.

What if we have no tests?

Start with the CI you can have today (lint, build, type-check) and cover with tests the part of the code that changes most or causes most incidents. You do not need 100% to get value.

Next step

Half an hour well spent

Walk us through the problem on a short call. You leave with a first read on how we'd approach it and what it would involve — no commitment, no sales deck.