Build Pipeline (bouwpijplijn) — is een reeks geautomatiseerde stappen die code doorloopt van het moment van commit tot een artefact dat klaar is voor implementatie. De pipeline omvat compilatie, het uitvoeren van tests, statische analyse en het voorbereiden van het releasepakket. Volgens gegevens van Google Cloud DORA, 2025, bereiken teams met een goed ingestelde pipeline een 440 keer snellere levering van wijzigingen in vergelijking met teams zonder automatisering.
Belangrijkste punten
Build Pipeline (bouwpijplijn) — is een geformaliseerde reeks stappen die automatisch worden uitgevoerd bij elke codewijziging. Elke stap controleert een bepaald kwaliteitsaspect: compileerbaarheid, correctheid van tests, afwezigheid van kwetsbaarheden, naleving van codestijl. Als een stap met een fout eindigt, stopt de pipeline.
Het concept van de pipeline komt van de productielijn — zoals in een fabriek waar elke station waarde toevoegt aan het product. In softwareontwikkeling voegt elke fase vertrouwen toe dat de code klaar is voor release. Moderne pipelines worden gedefinieerd als code (Pipeline as Code) en opgeslagen in de Git-repository samen met het project.
Volgens Continuous Delivery Foundation, 2025, verkort een volwassen build pipeline de tijd van commit tot release van weken naar minuten. Dit wordt bereikt door volledige automatisering en parallelle uitvoering van onafhankelijke fasen.
In plaats van configuratie via een webinterface, wordt een moderne pipeline beschreven in YAML- of Groovy-bestanden. Jenkinsfile, `.gitlab-ci.yml`, `.github/workflows/build.yml` — voorbeelden van Pipeline as Code. Voordelen: versiebeheer, code review, reproduceerbaarheid.
In Jenkins bestaan twee syntaxissen. Declaratief — eenvoudiger, met een duidelijke stages/steps structuur. Scripted — flexibeler, gebaseerd op Groovy. Voor de meeste projecten wordt de declaratieve benadering aanbevolen als leesbaarder en voorspelbaarder.
Een typische build pipeline voor een mobiele app omvat verschillende belangrijke fasen. Elke fase vervult zijn functie en filtert potentiële problemen in een vroeg stadium.
De pipeline begint met het klonen van de repository. Vervolgens worden afhankelijkheden geïnstalleerd: Gradle/Maven-pakketten, CocoaPods, SPM (Swift Package Manager), npm-pakketten. Het gebruik van cache in deze fase versnelt volgende builds met 50-70%.
Voor compilatie worden tools voor kwaliteitscontrole gestart: Detekt of ktlint voor Kotlin, SwiftLint voor Swift, ESLint voor JavaScript. Ze controleren de naleving van codestijl en vinden potentiële bugs op het niveau van codeanalyse.
Code wordt gecompileerd naar binaire vorm, parallel worden eenheidstests uitgevoerd. Voor Android is dit `./gradlew testDebugUnitTest`, voor iOS — `xcodebuild test -scheme App -destination 'platform=iOS Simulator'`. Falen van tests stopt de pipeline onmiddellijk.
name: Mobile Build Pipeline
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew detekt
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew testDebugUnitTest
- run: ./gradlew jacocoTestReport
build-release:
needs: [lint, unit-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v4
with:
name: release-apk
path: app/build/outputs/apk/release/app-release.apk
Na succesvolle compilatie worden tests uitgevoerd die het starten van de app vereisen: Espresso voor Android, XCTest/XCUITest voor iOS, Detox voor React Native. In deze fase wordt het artefact geïmplementeerd op een simulator of echt apparaat via farm-diensten (Firebase Test Lab, BrowserStack, Sauce Labs).
De juiste configuratie van de pipeline bepaalt de efficiëntie van het hele CI/CD-proces. Configuratie omvat het kiezen van triggers, het definiëren van parallelle en sequentiële fasen, parametrisering en integratie met externe diensten.
Belangrijkste triggers: push naar repository, pull request (vooral voor code review met automatische controles), aanmaken van Git-tag (voor release build), schema (nightly build). Pull request trigger — het meest praktisch voor teamwerk, omdat het problemen detecteert voordat code wordt samengevoegd.
Onafhankelijke fasen (linting, testen op verschillende OS-versies) moeten parallel worden uitgevoerd voor versnelling. Afhankelijke — sequentieel. Moderne CI-systemen beheren automatisch parallelle taken, door ze te verdelen over beschikbare agents.
Een lange pipeline vertraagt de ontwikkelcyclus en vermindert de motivatie van het team. Optimalisatie van de buildtijd — een van de belangrijkste taken van een DevOps-ingenieur bij het werken met een build pipeline.
Gradle Build Cache bewaart resultaten van eerdere compilaties. Als de broncode van een module niet is gewijzigd, wordt deze niet opnieuw gecompileerd. Incrementele compilatie in Swift en Kotlin werkt op dezelfde manier. De cachegrootte kan gigabytes bereiken, maar de tijdsbesparing is 30% tot 70%.
Eenheidstests kunnen gelijktijdig op meerdere agents worden uitgevoerd, met verdeling van testklassen. Sharding — techniek van het verdelen van tests in groepen (shards). GitHub Actions ondersteunt `strategy.matrix`, Jenkins — Parallel Test Executor, Gradle — `--parallel --max-workers`.
Elke extra fase voegt tijd toe. Analyseer de pipeline regelmatig: welke fasen kunnen worden samengevoegd? Linting kan bijvoorbeeld parallel met compilatie worden uitgevoerd, niet ervoor. Integratietests — alleen voor pull request, niet voor elke commit.
pipeline {
agent any
options {
timestamps()
timeout(time: 30, unit: 'MINUTES')
}
stages {
stage('Parallel Checks') {
parallel {
stage('Lint') {
steps { sh './gradlew detekt' }
}
stage('Unit Tests') {
steps { sh './gradlew test' }
}
}
}
stage('Build') {
steps { sh './gradlew assembleRelease' }
}
}
}
De build pipeline is een kritisch element van de softwareleveringsketen en de beveiliging ervan mag niet worden genegeerd. Compromittering van de pipeline kan leiden tot injectie van kwaadaardige code in het release-artefact, wat alle gebruikers van de app treft.
Bekende aanvallen: SolarWinds (2020), Codecov (2021), 3CX (2023) — ze maakten allemaal misbruik van kwetsbaarheden in CI/CD-pipelines. Gemeenschappelijke vector — een aanvaller krijgt toegang tot credentials van de buildserver en wijzigt code in de buildfase. Resultaat — een met een legitiem certificaat ondertekende kwaadaardige release.
Bewaar nooit ondertekeningssleutels, API-tokens en wachtwoorden in de repository of omgevingsvariabelen van het CI-systeem in open vorm. Gebruik CI-systeemgeheimen (GitHub Secrets, GitLab CI Variables), HashiCorp Vault, AWS Secrets Manager. Minimaliseer toegang tot geheimen — elke pipeline mag alleen de sleutels ontvangen die nodig zijn voor zijn specifieke stappen.
Elk artefact dat de pipeline verlaat, moet cryptografisch worden ondertekend en een attestatie bevatten — een bewijs van herkomst (provenance). Tools: SLSA framework, in-toto attestation, cosign voor het ondertekenen van containers. Handtekeningverificatie moet worden uitgevoerd vóór implementatie in elke omgeving.
name: Secure Build Pipeline
on: [push]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan dependencies
run: ./gradlew dependencyCheckAnalyze
- name: SAST scan
run: ./gradlew detekt
sign-attest:
needs: security-scan
runs-on: ubuntu-latest
steps:
- run: ./gradlew assembleRelease
- name: Sign APK
run: jarsigner -keystore ${{ secrets.KEYSTORE }} \
app-release.apk ${{ secrets.KEY_ALIAS }}
- name: Generate provenance
uses: actions/attest-build-provenance@v1
De build pipeline — een complex systeem dat constante monitoring vereist. Zonder statistieken is het onmogelijk te bepalen of de pipeline is vertraagd en welke fase een knelpunt is geworden.
Volg: doorlooptijd (total pipeline duration), tijd van elke fase, faalfrequentie (build failure rate), wachttijd in de wachtrij (queue time). Voor een groot team (>20 ontwikkelaars) wordt aanbevolen een dashboard in Grafana of Datadog in te stellen met geaggregeerde statistieken per week/maand.
Elke pipeline-fout vereist reactie. Stel meldingen in in messengers (Slack, Telegram, Discord) met link naar de foutlog en vermelding van de commit-auteur. Voor kritieke fouten — PagerDuty of Opsgenie met escalatie.
Tools zoals Act (voor GitHub Actions) of Jenkins Pipeline Unit Test maken het mogelijk de pipeline lokaal uit te voeren zonder commit. Dit versnelt de ontwikkeling en debugging van pipelines, vooral bij het toevoegen van nieuwe fasen of het wijzigen van configuratie.
Veelgestelde vragen
Build pipeline is een onderdeel van de CI/CD pipeline, verantwoordelijk voor compilatie en voorbereiding van het artefact. CI/CD pipeline is breder: het omvat implementatie, monitoring na release en infrastructuurcontroles.
Bij elke push naar de repository. Voor pull request — verplicht vóór samenvoegen. Nightly build — voor lange tests (e2e, performance) die niet verplicht zijn voor elke commit.
Voor nieuwe projecten — YAML (GitHub Actions, GitLab CI, Bitrise). Het is leesbaar en eenvoudig. Groovy (Jenkins) is krachtiger maar moeilijker te onderhouden. De keuze hangt af van het gebruikte CI-systeem.
Belangrijkste methoden: cachen van afhankelijkheden, parallel uitvoeren van onafhankelijke fasen, sharden van tests, uitsluiten van lange tests uit de pipeline voor elke commit, gebruik van krachtige build-agents.
Analyseer de logs: welke test precies faalde en waarom. Als de test flaky is — voeg een retry-mechanisme toe. Als het een echte bug is — repareer de code, schakel de test niet uit. Test uitschakelen is het laatste redmiddel.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook