Gepubliceerd op: 31 jul 2025

CI/CD bij Blenddata: Zo maken wij data engineering betrouwbaar

AuteurKevin BeversFunctiePlatform Engineer

Tag(s)

Expert DataOps

CI/CD staat voor Continuous Integration en Continuous Delivery. Het betekent dat we automatisch nieuwe versies van onze data pipelines testen, valideren en opleveren, zodat verbeteringen snel, veilig en betrouwbaar beschikbaar zijn.

AuteurKevin BeversFunctiePlatform Engineer

Tag(s)

Expert DataOps

Het doel van CI/CD

Bij Blenddata willen we data engineering net zo betrouwbaar en schaalbaar maken als moderne softwareontwikkeling. CI/CD helpt ons om het ontwikkelen, testen en opleveren van data pipelines te stroomlijnen en te versnellen. Dit betekent dat nieuwe functies sneller en met minder fouten beschikbaar zijn. Door automatisering en standaardisatie kunnen we sneller schakelen, fouten eerder detecteren en kunnen datastacks van klanten direct profiteren van verbeteringen aan onze modern data stack template.

Een veelvoorkomend probleem bij bedrijven die nog niet met CI/CD werken, is dat kleine foutjes of onverwachte problemen pas na livegang ontdekt worden. Dit kan zorgen voor onbetrouwbare data of zelfs stilstand van belangrijke processen. Met CI/CD voorkomen we dit door elke wijziging automatisch te valideren en te testen, zodat we zeker weten dat alles werkt zoals verwacht.

Waarom is het belangrijk?

CI/CD zorgt ervoor dat we bij elke wijziging in onze data pipelines automatisch controleren of alles nog werkt zoals verwacht. We gebruiken hiervoor GitLab als CI/CD-platform, waarin we herbruikbare bouwstenen (templates) hebben gemaakt voor onze CI/CD-processen. Hiermee kunnen we per project eenvoudig instellen welke stappen (zoals testen, bouwen en deployen) automatisch uitgevoerd moeten worden. Elk project dat draait op onze Modern Data Stack maakt hier gebruik van.

Bij elke nieuwe versie van een data pipeline voeren we automatisch tests uit. Zo weten we zeker dat nieuwe toevoegingen geen bestaande functionaliteit kapot maken en dat de data die de klant verwacht, nog steeds klopt. Nieuwe feature? Dan hoort daar een nieuwe test bij.

Voor enterprise klanten sluiten we aan bij de tools die zij al gebruiken, zoals Azure DevOps. Zo zorgen we ervoor dat onze werkwijze altijd past bij de wensen en processen van de klant.

Welke stappen volgen we in onze CI/CD pipeline?

Onze CI/CD pipelines draaien meestal de volgende stappen:

  1. Code validatie: Linting en build-checks met tools als Nox en pre-geïnstalleerde Docker images (Python + UV). We controleren of de code netjes en volgens de afspraken is geschreven.
  2. Functionele validatie: Automatische tests (unit/integration) draaien lokaal én in de pipeline, dankzij gedeelde Nox-configuratie. Nieuwe features krijgen altijd nieuwe tests.
  3. End-to-end data pipeline tests & data validatie: Volledige data pipeline runs met dedicated testdatabases per klant, inclusief data-validatie na transformaties (dbt, Dagster). We checken of de data nog steeds klopt en volledig is.
  4. Build: Productieversies van pipelines worden automatisch gebouwd en getagd. We maken een nieuwe productieversie van de pipeline.
  5. Infrastructure as Code deployment: Met Terraform worden infrastructuurwijzigingen automatisch uitgerold naar Azure, volledig versioned.
  6. Automatische dependency updates: Renovate Bot zorgt dat libraries en packages up-to-date blijven, wat security risico’s minimaliseert.
  7. Changelog & versiebeheer: Automatische changelog generatie en semantische versie-tagging via semantic-release. We houden automatisch een gedetailleerde changelog bij.

Tooling in detail

  • Nox: Voor het definiëren en uitvoeren van test-sessies, zowel lokaal als in CI.
  • Docker: Zorgt voor consistente, geïsoleerde en reproduceerbare omgevingen voor het bouwen, testen en draaien van data pipelines. Door alle dependencies en configuraties vast te leggen in een Docker image, voorkomen we ‘works on my machine’-problemen en weten we zeker dat pipelines overal hetzelfde draaien: lokaal, in CI en in productie.
  • UV: Snelle, moderne Python package manager, standaard in onze images.
  • Terraform: Infrastructure as Code, met automatische validatie en deployment.
  • Terraform-docs: Gebaseerd op de Terraform code wordt er documentatie geschreven.
  • Renovate Bot: Automatische dependency updates en security patches.
  • Semantic-release: Automatische versiebeheer en changelog generatie.

Onze CI/CD-templates zijn centraal beheerd in een eigen repository. Projecten gebruiken deze templates in hun .gitlab-ci.yml:

YAML:
1include:
2  - project: blend-data/cicd-templates
3    ref: 2.x.x
4    file: /customer-projects/mds-with-terraform.yml

Hierdoor profiteren alle projecten direct van verbeteringen en bugfixes in de templates. Updates aan templates worden automatisch als merge requests aangeboden in klantprojecten door middel van renovate en copier. Hiervoor hebben we een configuratie in onze renovate bot:

JSON:
1"packageRules": [
2      {
3        "matchManagers": ["copier"],
4        "updatePinnedDependencies": true,
5        "groupName": "Copier Project Template Update",
6        "rebaseWhen": "behind-base-branch",
7        "automerge": false,
8        "rangeStrategy": "replace",
9        "commitMessagePrefix": "fix(copier): ",
10        "commitMessageAction": "Update project template",
11        "commitMessageTopic": "{{currentVersion}}",
12        "schedule": [
13         "* 6 * * 1",
14         "* 6 * * 4"
15       ]
16      }
17],

Hiermee stellen we het volgende in:

  • Renovate kijkt naar de versie van de template repo bijhoud doormiddel van de .copier-answer.yaml (die in elke repo staat na het aanmaken van de repo met copier).
  • Op Maandag en Donderdag ochtend om 06:00 wordt er gekeken of de huidige versie van de repo ouder is dan de versie van de template, als dit het geval is maken we een merge request aan met de nieuwe aanpassingen.

Wat zijn efficiënte CI/CD pipelines?

Wij vinden het vooral belangrijk dat onze CI/CD alle kritische aspecten van een project (zoals de data pipelines) doorlopen. Zo hebben we vertrouwen dat elke nieuwe aanpassing goed werkt en geen onverwachte problemen veroorzaakt. Door onze modulaire aanpak kunnen we per project precies de juiste stappen zetten. Onnodige stappen laten we weg: zo draaien we in een project zonder Python geen Python-tests, en in een infrastructuurproject voeren we alleen bijvoorbeeld Terraform-tests uit en geen data-tests. Conditional jobs zorgen ervoor dat alleen relevante stappen worden uitgevoerd. Zo blijft het proces overzichtelijk, snel en betrouwbaar.

De voordelen van CI/CD-implementatie

Sinds we CI/CD gebruiken, merken we dat fouten veel eerder worden ontdekt. Dit geeft rust: we weten dat wat we opleveren, werkt zoals het hoort. Ook kunnen we makkelijk terug naar een vorige versie als dat nodig is, en houden we automatisch een gedetailleerde changelog bij.

Onze security is verbeterd doordat we tools zoals Renovate Bot gebruiken. Hiermee worden onze gebruikte libraries en pakketten automatisch up-to-date gehouden, wat helpt om beveiligingsproblemen te voorkomen. Daarnaast hebben we een template die we via CI/CD naar alle klantprojecten synchroniseren. Zo profiteren al onze klanten direct van verbeteringen in onze Modern Data Stack.

Wij stroomlijnen jouw software

Wij maken data engineering betrouwbaar door goede software best practices toe te passen. Dankzij onze CI/CD-aanpak zijn onze data pipelines stabiel, veilig en altijd up-to-date. Wil je weten hoe wij jouw data-project kunnen versnellen en verbeteren? Neem gerust contact op.

Wil jij je platform kunnen updaten zonder stress?

Of ben je benieuwd hoe je je tests automatisch kan draaien, onafhankelijk van de omgeving?
Neem gerust contact op! We helpen je graag verder.

Contact

Vincent Fokker

Co-founder | Data Architect

Share this page

Blenddata © 2025 | Alle rechten voorbehouden

Website made by: Gewest13