Build Pipeline ist eine Abfolge automatisierter Phasen, die der Code vom Moment des Commits bis zum bereitgestellten Artefakt durchläuft. Die Pipeline umfasst Kompilierung, Testausführung, statische Analyse und die Vorbereitung des Release-Pakets. Laut Google Cloud DORA, 2025 erreichen Teams mit einer gut konfigurierten Pipeline eine 440-mal schnellere Auslieferung von Änderungen im Vergleich zu Teams ohne Automatisierung.
Das Wichtigste
Build Pipeline ist eine formalisierte Abfolge von Schritten, die bei jeder Codeänderung automatisch ausgeführt werden. Jeder Schritt überprüft einen bestimmten Qualitätsaspekt: Kompilierbarkeit, Korrektheit der Tests, Abwesenheit von Sicherheitslücken, Einhaltung des Codestils. Wenn ein Schritt fehlschlägt, stoppt die Pipeline.
Das Pipeline-Konzept stammt aus der Produktionslinie — wie in einer Fabrik, wo jede Station einen Mehrwert zum Produkt beiträgt. In der Entwicklung fügt jede Phase Vertrauen hinzu, dass der Code für die Veröffentlichung bereit ist. Moderne Pipelines werden als Code definiert (Pipeline as Code) und zusammen mit dem Projekt im Git-Repository gespeichert.
Laut der Continuous Delivery Foundation, 2025 verkürzt eine ausgereifte Build-Pipeline die Zeit vom Commit bis zur Veröffentlichung von Wochen auf Minuten. Dies wird durch vollständige Automatisierung und parallele Ausführung unabhängiger Phasen erreicht.
Statt über eine Weboberfläche zu konfigurieren, wird eine moderne Pipeline in YAML- oder Groovy-Dateien beschrieben. Jenkinsfile, `.gitlab-ci.yml`, `.github/workflows/build.yml` sind Beispiele für Pipeline as Code. Vorteile: Versionierung, Code-Review, Reproduzierbarkeit.
Jenkins hat zwei Syntaxen. Deklarativ — einfacher, mit einer klaren Stages/Steps-Struktur. Scripted — flexibler, basierend auf Groovy. Für die meisten Projekte wird der deklarative Ansatz empfohlen, da er lesbarer und vorhersagbarer ist.
Eine typische Build-Pipeline für eine mobile Anwendung umfasst mehrere Schlüsselphasen. Jede Phase erfüllt ihre Funktion und filtert potenzielle Probleme frühzeitig heraus.
Die Pipeline beginnt mit dem Klonen des Repositories. Dann werden die Abhängigkeiten installiert: Gradle/Maven-Pakete, CocoaPods, SPM (Swift Package Manager), npm-Pakete. Die Verwendung von Caching in dieser Phase beschleunigt nachfolgende Builds um 50-70%.
Vor der Kompilierung werden Code-Qualitätstools gestartet: Detekt oder ktlint für Kotlin, SwiftLint für Swift, ESLint für JavaScript. Sie überprüfen die Einhaltung des Codestils und finden potenzielle Fehler auf der Code-Analyse-Ebene.
Der Code wird in Binärform kompiliert, Unit-Tests laufen parallel. Für Android ist dies `./gradlew testDebugUnitTest`, für iOS — `xcodebuild test -scheme App -destination 'platform=iOS Simulator'`. Testfehler stoppen die Pipeline sofort.
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
Nach erfolgreicher Kompilierung werden Tests ausgeführt, die den Start der Anwendung erfordern: Espresso für Android, XCTest/XCUITest für iOS, Detox für React Native. In dieser Phase wird das Artefakt auf einem Simulator oder echten Gerät über Farm-Dienste (Firebase Test Lab, BrowserStack, Sauce Labs) bereitgestellt.
Die richtige Pipeline-Konfiguration bestimmt die Effizienz des gesamten CI/CD-Prozesses. Die Konfiguration umfasst die Auswahl von Triggern, die Definition paralleler und sequenzieller Phasen, die Parametrisierung und die Integration mit externen Diensten.
Haupttrigger: Push ins Repository, Pull Request (besonders für Code-Review mit automatischen Prüfungen), Erstellung eines Git-Tags (für Release-Builds), Zeitplan (Nightly Build). Der Pull-Request-Trigger ist für die Teamarbeit am praktischsten, da er Probleme vor dem Zusammenführen des Codes identifiziert.
Unabhängige Phasen (Linting, Tests auf verschiedenen OS-Versionen) sollten zur Beschleunigung parallel ausgeführt werden. Abhängige — sequenziell. Moderne CI-Systeme verwalten automatisch parallele Aufgaben und verteilen sie auf verfügbare Agenten.
Eine lange Pipeline verlangsamt den Entwicklungszyklus und verringert die Team-Motivation. Die Optimierung der Build-Zeit ist eine der Hauptaufgaben eines DevOps-Ingenieurs bei der Arbeit mit Build-Pipelines.
Gradle Build Cache speichert die Ergebnisse früherer Kompilierungen. Wenn sich der Quellcode eines Moduls nicht geändert hat, wird es nicht neu kompiliert. Inkrementelle Kompilierung in Swift und Kotlin funktioniert ähnlich. Die Cache-Größe kann Gigabyte erreichen, aber die Zeitersparnis liegt zwischen 30% und 70%.
Unit-Tests können gleichzeitig auf mehreren Agenten ausgeführt werden, wobei die Testklassen verteilt werden. Sharding ist eine Technik zum Aufteilen von Tests in Gruppen (Shards). GitHub Actions unterstützt `strategy.matrix`, Jenkins — Parallel Test Executor, Gradle — `--parallel --max-workers`.
Jede zusätzliche Phase fügt Zeit hinzu. Analysieren Sie die Pipeline regelmäßig: Welche Phasen können kombiniert werden? Zum Beispiel kann Linting parallel zur Kompilierung statt davor ausgeführt werden. Integrationstests — nur für Pull Requests, nicht für jeden 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' }
}
}
}
Die Build-Pipeline ist ein kritisches Element der Software-Lieferkette, und ihre Sicherheit darf nicht ignoriert werden. Eine Kompromittierung der Pipeline kann zur Einschleusung von schädlichem Code in das Release-Artefakt führen und alle Benutzer der Anwendung betreffen.
Bekannte Angriffe: SolarWinds (2020), Codecov (2021), 3CX (2023) — alle nutzten Schwachstellen in CI/CD-Pipelines aus. Gemeinsamer Vektor — ein Angreifer erhält Zugriff auf die Anmeldeinformationen des Build-Servers und ändert den Code in der Build-Phase. Ergebnis — eine mit einem legitimen Zertifikat signierte schädliche Veröffentlichung.
Speichern Sie niemals Signierschlüssel, API-Tokens und Passwörter im Repository oder in Umgebungsvariablen des CI-Systems im Klartext. Verwenden Sie CI-System-Geheimnisse (GitHub Secrets, GitLab CI Variables), HashiCorp Vault, AWS Secrets Manager. Minimieren Sie den Zugriff auf Geheimnisse — jede Pipeline sollte nur die Schlüssel erhalten, die für ihre spezifischen Schritte benötigt werden.
Jedes Artefakt, das die Pipeline verlässt, muss kryptografisch signiert sein und eine Attestation — einen Herkunftsnachweis (Provenance) — enthalten. Tools: SLSA-Framework, in-toto-Attestation, cosign zum Signieren von Containern. Die Signaturprüfung muss vor der Bereitstellung in jeder Umgebung durchgeführt werden.
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
Die Build-Pipeline ist ein komplexes System, das eine ständige Überwachung erfordert. Ohne Metriken ist es unmöglich festzustellen, ob die Pipeline langsamer geworden ist und welche Phase zum Engpass geworden ist.
Verfolgen Sie: Gesamtdauer der Pipeline, Zeit jeder Phase, Build-Fehlerrate, Wartezeit in der Warteschlange. Für ein großes Team (>20 Entwickler) wird empfohlen, ein Dashboard in Grafana oder Datadog mit aggregierten Statistiken für die Woche/den Monat einzurichten.
Jeder Pipeline-Fehler erfordert eine Reaktion. Richten Sie Benachrichtigungen in Messengern (Slack, Telegram, Discord) mit einem Link zum Fehlerprotokoll und dem Namen des Commit-Autors ein. Für kritische Fehler — PagerDuty oder Opsgenie mit Eskalation.
Tools wie Act (für GitHub Actions) oder Jenkins Pipeline Unit Test ermöglichen das lokale Ausführen der Pipeline ohne Commit. Dies beschleunigt die Entwicklung und das Debugging von Pipelines, insbesondere beim Hinzufügen neuer Phasen oder Ändern der Konfiguration.
Häufig gestellte Fragen
Build Pipeline ist ein Teil der CI/CD-Pipeline, der für die Kompilierung und Artefaktvorbereitung verantwortlich ist. Die CI/CD-Pipeline ist breiter: sie umfasst Bereitstellung, Überwachung nach der Veröffentlichung und Infrastrukturprüfungen.
Bei jedem Push ins Repository. Für Pull Requests — vor dem Zusammenführen erforderlich. Nightly Build — für lange Tests (e2e, Performance), die nicht für jeden Commit erforderlich sind.
Für neue Projekte — YAML (GitHub Actions, GitLab CI, Bitrise). Es ist lesbar und einfach. Groovy (Jenkins) ist leistungsfähiger, aber schwieriger zu warten. Die Wahl hängt vom verwendeten CI-System ab.
Hauptmethoden: Abhängigkeits-Caching, parallele Ausführung unabhängiger Phasen, Test-Sharding, Ausschluss langer Tests aus der Pipeline für jeden Commit, Verwendung leistungsstarker Build-Agenten.
Analysieren Sie die Protokolle: welcher spezifische Test fehlgeschlagen ist und warum. Wenn der Test flaky (instabil) ist — fügen Sie einen Wiederholungsmechanismus hinzu. Wenn es sich um einen echten Fehler handelt — korrigieren Sie den Code, deaktivieren Sie den Test nicht. Tests zu deaktivieren ist das letzte Mittel.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch