Build Server — is een dedicated server of virtuele machine die automatisch broncode compileert, tests uitvoert en kant-en-klare artefacten maakt. Het fungeert als het centrale knooppunt van de CI/CD-infrastructuur en neemt de compileertaken over, waardoor de lokale machines van ontwikkelaars worden ontlast. Volgens het rapport GitLab Global DevSecOps Report, 2025 gebruikt 67% van de teams dedicated buildservers om de stabiliteit en snelheid van builds te verhogen.
Belangrijkste
Build Server (compilatieserver) — is een gespecialiseerd computersysteem bedoeld voor het automatisch uitvoeren van taken met betrekking tot het compileren van code en het voorbereiden van releases. In tegenstelling tot lokale compilatie op de machine van de ontwikkelaar, werkt de server met een kopie van de repository, gebruikt een schone omgeving en vaste versies van afhankelijkheden.
De buildserver is een belangrijk onderdeel van de Continuous Integration-praktijk. Het garandeert dat elke commit hetzelfde verificatieproces doorloopt, ongeacht wie deze heeft uitgevoerd. Dit elimineert het probleem van “het werkt op mijn machine” en zorgt voor een uniforme kwaliteitsstandaard.
Volgens gegevens van Google DORA, 2025 verkorten teams die een dedicated buildserver gebruiken de tijd voor het bevestigen van wijzigingen van uren naar minuten. Dit heeft direct invloed op de snelheid waarmee functies en fixes bij de eindgebruikers komen.
Het compileren van mobiele apps vereist aanzienlijke resources: het compileren van Kotlin of Swift kan 5 tot 40 minuten duren. Als de compilatie wordt gestart op de lokale machine van de ontwikkelaar, kan hij niet productief werken tot deze is voltooid. De buildserver lost dit probleem op door de ontwikkelaar vrij te maken voor andere taken.
In de praktijk worden de termen vaak als synoniemen gebruikt, maar er is een verschil: CI-server (Jenkins, CircleCI) — is het systeem dat pijplijnen beheert, terwijl de buildserver de fysieke of virtuele host is waarop deze pijplijnen worden uitgevoerd. Eén CI-server kan meerdere buildagenten (build slaves) beheren.
Een typische buildserver bestaat uit verschillende componenten, die elk verantwoordelijk zijn voor een specifieke fase van het proces. Inzicht in de architectuur helpt om de infrastructuur correct te schalen onder de belasting van het team.
Kern (executor) — voert compileertaken uit. Kan werken als Docker-containers, virtuele machines of direct op de host. Taakwachtrij beheert de prioriteiten van parallelle builds. Artefactenopslag bewaart de resultaten (APK, IPA, AAB) voor latere publicatie.
Om het werk te versnellen kan de buildserver een pool van agenten beheren. Elke agent — is een aparte machine of container die een build kan uitvoeren. Bij toenemende belasting voegt automatisch schalen (auto-scaling) nieuwe agenten toe in de cloud. Jenkins met de Kubernetes-plugin kan bijvoorbeeld dynamisch pods creëren voor elke build.
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: android-sdk
image: openjdk:17-jdk
command: ['sleep','infinity']
"""
}
}
stages {
stage('Build') {
steps {
sh './gradlew assembleDebug'
}
}
}
}
Buildservers worden ingedeeld in verschillende categorieën op basis van de manier van hosten en de doeltechnologiestack. De keuze voor een specifieke oplossing hangt af van de teamgrootte, het budget en de beveiligingseisen.
Jenkins, TeamCity, Bamboo, GitLab Runner (self-hosted) — worden geïnstalleerd op eigen servers of VPS. Voordelen: volledige controle over de configuratie, mogelijkheid om elke software te gebruiken, gegevens verlaten de bedrijfsinfrastructuur niet. Nadelen: beheer-, update- en schaalkosten.
GitHub Actions, CircleCI, Bitrise, Codemagic, GitLab SaaS — vereisen geen serverbeheer. Betaling gebeurt per buildminuut of via een abonnement. Voor kleine teams is dit een optimale start. Voor grote projecten met veel builds kunnen de kosten de prijs van een self-hosted oplossing overschrijden.
| Oplossing | Type | Platforms | Startprijs |
|---|---|---|---|
| Jenkins | Self-hosted | Elk | Gratis (open-source) |
| GitHub Actions | Cloud | Linux, macOS, Windows | 2000 min/maand gratis |
| Bitrise | Cloud | iOS, Android, Flutter, React Native | $0 (90 min/maand) |
| TeamCity | Self-hosted | Elk | Gratis (100 builds) |
Het bijzondere van iOS is dat compilatie alleen mogelijk is op macOS. Opties: Mac mini in het rack, MacStadium (Mac-huur), GitHub Actions met macOS runner, Bitrise met eigen Mac-agenten. Een self-hosted Mac buildserver vereist de aanschaf van dure apparatuur en het onderhoud ervan.
Laten we stap voor stap het instellen van een buildserver voor een mobiel project met Android- en iOS-builds bekijken. Als basis gebruiken we GitHub Actions met een self-hosted runner voor iOS en een cloudrunner voor Android.
Kies een beheerplatform (Jenkins, GitLab, GitHub Actions). Installeer het hoofdknooppunt, configureer toegang tot de repository via SSH of personal access token. Stel een webhook in voor het automatisch starten van een build bij pushmeldingen naar de repository.
Registreer een of meer machines als agenten (slaves/runners). Voor Android-builds kan de agent werken op Linux of Windows met geïnstalleerde JDK, Android SDK, Gradle. Voor iOS — op macOS met Xcode Command Line Tools en CocoaPods.
Definieer de fasen: checkout, installatie van afhankelijkheden, compilatie, testen, publicatie van het artefact. Gebruik caching van afhankelijkheden (Gradle cache, CocoaPods cache, Docker image layers) om te versnellen.
name: Android Build
on:
push:
branches: [main, develop]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Cache Gradle
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
- name: Build Release APK
run: ./gradlew assembleRelease
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: app-release.apk
path: app/build/outputs/apk/release/app-release.apk
De keuze tussen een self-hosted en cloud buildserver is niet alleen een technische, maar ook een financiële beslissing. De kosten variëren sterk afhankelijk van het aantal builds, de benodigde uitvoeringstijd en de noodzaak van macOS voor iOS.
Een self-hosted server vereist kapitaaluitgaven (CAPEX): aanschaf van apparatuur (Mac mini vanaf $699, serverracks, netwerkapparatuur), configuratie en onderhoud. Cloudoplossingen — operationele kosten (OPEX): betaling per buildminuut. Voor kleine teams is OPEX voordeliger, voor grote projecten met honderden builds per dag verdient CAPEX zich terug in 6–12 maanden.
| Parameter | Self-hosted (Jenkins) | Cloud (GitHub Actions) | Gespecialiseerd (Bitrise) |
|---|---|---|---|
| Initiële kosten | $1000–$5000 | $0 | $0 |
| Maandelijkse betaling | $50–$200 (hosting) | $0–$500 (minutenlimiet) | $0–$300 (abonnement) |
| macOS-ondersteuning | Vereist Mac mini + CI-configuratie | Ingebouwd (macOS runner) | Ingebouwd |
| Beheer | 5–10 uur/maand | 1–2 uur/maand | 1–2 uur/maand |
Houd bij het berekenen van het budget rekening met verborgen kosten: tijd voor software-updates, het oplossen van storingen, back-ups van configuraties, netwerkopslag van artefacten. Voeg voor self-hosted oplossingen 20–30% toe aan de basisonderhoudskosten. Voor cloud — zorg ervoor dat de minutenlimiet piekbelastingen dekt, vooral vóór releases.
De kosten van de buildserver kunnen op verschillende manieren worden verlaagd: gebruik spot-instanties in de cloud (tot 70% goedkoper), cache afhankelijkheden tussen builds, beperk de uitvoeringstijd van mislukte pijplijnen en configureer het automatisch uitschakelen van inactieve self-hosted agenten buiten werktijd.
Efficiënt werken van de buildserver vereist het naleven van een aantal principes. Optimalisatie van de buildsnelheid en stabiliteit van de infrastructuur hebben direct invloed op de productiviteit van het ontwikkelingsteam.
Gradle Build Cache, CCache voor C/C++, incremental compiler voor Kotlin en Swift — schakel alle beschikbare cachingmechanismen in. Configureer een externe buildcache (via HTTP of S3) zodat verschillende ontwikkelaars en agenten compilatieresultaten kunnen delen.
Elke build moet in een schone omgeving worden uitgevoerd. Gebruik Docker-containers of tijdelijke virtuele machines om invloed van vorige builds op de huidige uit te sluiten. Dit elimineert het probleem van “vervuilde staat” (state pollution).
De buildserver heeft toegang tot broncodes, ondertekeningssleutels en geheimen. Minimaliseer het aanvalsoppervlak: gebruik geïsoleerde agenten voor verschillende projecten, beperk toegang tot het hoofdknooppunt, gebruik signed commits en controleer afhankelijkheden op kwetsbaarheden.
Veelgestelde vragen
Voor kleine teams zijn cloudoplossingen optimaal: GitHub Actions (gratis tot 2000 min/maand) of Bitrise voor mobiele projecten. Ze vereisen geen beheer en zijn snel geconfigureerd.
Ja, maar er zijn twee soorten agenten nodig: op macOS voor iOS en op Linux/Windows voor Android. De CI-server (Jenkins, GitLab) kan beide soorten agenten vanuit één interface beheren.
Voor Android-builds — minimaal 8 GB RAM, aanbevolen 16 GB. Voor iOS — vanaf 8 GB. Als de pijplijn meerdere parallelle builds uitvoert, schaalt het geheugen lineair: N builds x 8 GB.
Self-hosted biedt volledige controle over de configuratie, heeft geen minutenlimiet voor builds (verdient zich terug bij grote volumes) en zorgt voor gegevensisolatie. Cloudoplossingen zijn voordeliger voor kleine en middelgrote teams.
Ja, Flutter-projecten vereisen ook compilatie voor verschillende platforms. Codemagic — is een gespecialiseerde CI/CD voor Flutter die tegelijkertijd Android-, iOS-, Web- en Desktop-builds vanuit één repository ondersteunt.
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