Expertise hub / Proces
Proces DevOps 4 min lezen

Een CI/CD pipeline zonder tests is een snelweg zonder vangrails.

Je gaat snel. Tot je niet meer gaat. Veel teams optimaliseren hun pipeline voor snelheid en vergeten dat de pipeline zelf het kwaliteitscontract is.

Dat contract werkt alleen als de juiste controles erin zitten. Wat niet wordt gecontroleerd, glipt erdoor. En wat faalt zonder gevolgen voor de release, is geen kwaliteitsbarrière maar decoratie.

Wat hoort er in een goede pipeline?

1. Linting en statische analyse

Goedkoop, snel, en vangt de simpele fouten voor ze ergens anders opduiken.

2. Unit tests

Altijd, bij elke commit. Dit is de basislaag die nooit mag ontbreken.

3. Integratietests

Bij elke push naar een feature branch, zodat je snel weet of onderdelen nog samenwerken.

4. End-to-end smoke tests

Bij merge naar main, als laatste check voor de belangrijkste gebruikersflows.

Snelheid versus volledigheid

Niet alles hoeft bij elke commit te draaien. Unit tests altijd, zware end-to-end tests bij merge naar main, performance en security elke nacht of elke week. Maak bewuste keuzes over wanneer wat draait.

Een pipeline die 45 minuten duurt, wordt omzeild. Snelheid is ook kwaliteit.

Dat laatste punt wordt vaak onderschat. Een pipeline die te lang duurt, nodigt uit tot workarounds: rechtstreeks naar productie pushen, tests overslaan "voor deze ene keer", of de pipeline gewoon negeren als hij toch altijd rood staat. De pipeline moet dus niet alleen grondig zijn, hij moet ook snel genoeg zijn om nageleefd te worden.

Falende tests blokkeren de deploy, altijd

Tests zonder enforcement zijn decoratie

Als een falende test geen gevolgen heeft, heeft hij ook geen waarde. Koppel je tests aan het deploymentproces, want kwaliteit afdwingbaar maken is de enige manier om ze te garanderen.

Concreet betekent dat: de deploy-stap heeft een needs-afhankelijkheid van de teststap, en niets meer dan dat.

.github/workflows/ci.ymlGitHub Actions
// deploy start pas als beide teststappen slagen
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm run lint
      - run: npm run test:unit
      - run: npm run test:integration

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: success()
    steps:
      - run: npm run deploy

Geen needs: test? Dan draaien je tests wel, maar de deploy wacht er niet op. Precies dat ene sleuteltje maakt het verschil tussen een kwaliteitscontract en een rapport dat niemand leest.

De pipeline is je kwaliteitscontract, bij elke wijziging, zonder uitzondering. Een goede pipeline is geen technisch kunstwerk. Het is een geautomatiseerd kwaliteitscontract dat precies doet wat het belooft: niets doorlaten dat niet gecontroleerd is.

Carrousel: tests in je CI/CD pipeline
// Ook als carrousel

Dit artikel verscheen eerder als carrousel op LinkedIn.

Bekijk op LinkedIn
// Verder praten

Herkenbaar?

We nemen je testaanpak door en zeggen eerlijk waar de winst zit. En waar niet.

Plan een gesprek
// Lees ook