GitLab CI: Pipelines und kontinuierliche Integration

Autor: IT Sectr Veröffentlicht: 2026-04-13 Lesezeit: 8 Min.

GitLab CI ist ein in GitLab integriertes System für kontinuierliche Integration und Bereitstellung, das das Erstellen, Testen und Bereitstellen mobiler Anwendungen über YAML-konfigurierte Pipelines automatisiert. Laut GitLab, 2024 verarbeitet die Plattform monatlich über 300 Millionen Pipelines und unterstützt sowohl Cloud- als auch selbstgehostete Runner.

Wichtige Punkte

  • GitLab CI — in GitLab integriertes CI/CD-System zur Automatisierung von Builds und Tests mobiler Projekte
  • Pipeline — eine Abfolge von Stages, die auf Runnern ausgeführt und in .gitlab-ci.yml beschrieben wird
  • Runner — ein Agent, der Pipeline-Jobs ausführt, kann Cloud- oder selbstgehostet sein
  • Stage — eine logische Gruppe von Jobs (Build, Test, Deploy), die parallel innerhalb einer Stage ausgeführt werden
  • Artifact — das Ergebnis eines Jobs (APK, IPA, Berichte), das zwischen Stages übergeben wird

Was ist GitLab CI?

GitLab CI ist Teil der einheitlichen DevSecOps-GitLab-Anwendung, die kontinuierliche Integration, Bereitstellung und Deployment umfasst. Das System begann 2012 als separates Projekt, wurde aber später direkt in GitLab integriert. Das Grundprinzip ist die Konfiguration als Code über eine .gitlab-ci.yml-Datei im Repository-Stammverzeichnis. GitLab CI ist sowohl als Cloud-SaaS-Version als auch als selbstverwaltete Installation verfügbar.

Für die mobile Entwicklung bietet GitLab CI die Automatisierung von APK- und IPA-Builds, die Ausführung instrumentierter Tests, statische Codeanalyse, App-Signierung und Store-Veröffentlichung. Die Plattform unterstützt Docker-Images für benutzerdefinierte Umgebungen, was die Vorinstallation von Android SDK, NDK, Xcode und anderen Tools ermöglicht. Die integrierte Container Registry vereinfacht die Speicherung und Verteilung von Images innerhalb des Teams.

GitLab CI-Architektur: Runners, Pipelines und Stages

Die GitLab CI-Architektur besteht aus drei Schlüsselkomponenten. GitLab Runner ist ein Agent, der Jobs ausführt. Runner können gemeinsam genutzt (von GitLab bereitgestellt), Gruppe (für eine Gruppe von Projekten) oder spezifisch (für ein Projekt) sein. Jeder Runner wird mit einem Executor registriert: Shell, Docker, Kubernetes oder VirtualBox. GitLab Runner unterstützt automatische Skalierung zur Bewältigung von Spitzenlasten.

Eine Pipeline ist eine Sammlung von Stages, die sequenziell ausgeführt werden. Innerhalb einer Stage werden Jobs parallel ausgeführt. Eine typische Struktur für ein mobiles Projekt ist: Build → Test → Deploy. Wenn ein Job in der Test-Stage fehlschlägt, wird Deploy nicht ausgelöst. Für das Deployment kann ein manueller Trigger (when: manual) konfiguriert werden. Multi-Projekt-Pipeline-Trigger werden ebenfalls für komplexe CI/CD-Szenarien zwischen Repositories unterstützt.

GitLab Runner-Executors

Docker-Executor ist der beliebteste für CI/CD mobiler Anwendungen. Jeder Job wird in einem sauberen Docker-Container ausgeführt, was Isolation und Reproduzierbarkeit gewährleistet. Für Android-Builds wird das Image android-sdk mit vorinstalliertem SDK verwendet; für iOS ein macOS-Runner mit Shell-Executor.

.gitlab-ci.yml-Konfiguration für mobile Projekte

Die .gitlab-ci.yml-Datei definiert eine Pipeline im YAML-Format. Die Hauptabschnitte umfassen: Image (Docker-Image), Stages (Stufenliste), Variables (Umgebungsvariablen), before_script (Befehle vor jedem Job) und die Jobs mit den Abschnitten Script, Artifacts, Cache. GitLab CI unterstützt Include — das Einbinden externer YAML-Dateien zur Wiederverwendung gemeinsamer Konfigurationen zwischen Projekten.

Variablen in GitLab CI können auf mehreren Ebenen festgelegt werden: global in der Benutzeroberfläche, in der Konfigurationsdatei, in Gruppen- und Projekteinstellungen. Die Variablenpriorität folgt einer Hierarchie: Trigger-Variablen haben die höchste Priorität, gefolgt von CI/CD-Variablen aus der UI, dann aus der .gitlab-ci.yml. Variablen können geschützt werden, sodass sie nur für geschützte Branches und Tags zugänglich sind.

Basisvariablen und Image

yaml
image: openjdk:17-jdk-slim

variables:
  ANDROID_SDK_VERSION: "35"
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"

stages:
  - build
  - test
  - deploy

cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - .gradle/

Build-Job mit Artefakten

Der Job generate-apk erstellt ein Gradle-Projekt und speichert die APK als Artefakt. Artefakte werden zwischen Stages übergeben — ein Deploy-Job kann die APK aus der Build-Stage verwenden. Die Aufbewahrungsdauer von Artefakten wird über expire_in konfiguriert.

yaml
generate-apk:
  stage: build
  script:
    - ./gradlew assembleRelease
  artifacts:
    paths:
      - app/build/outputs/apk/release/
    expire_in: 1 day

GitLab CI vs GitHub Actions: Hauptunterschiede

Bei der Wahl zwischen GitLab CI und GitHub Actions für ein mobiles Projekt ist die Team-Infrastruktur ein entscheidender Faktor. GitLab CI bietet eine integrierte Container Registry zum Speichern von Docker-Images mit Android SDK. GitHub Actions ist auf GitHub Packages oder externe Registries angewiesen. GitLab verfügt außerdem über eine integrierte SAST (Static Application Security Testing) zur Analyse von Code-Schwachstellen.

GitLab CI bietet ein flexibleres Runner-Modell — es unterstützt Kubernetes-Executor, automatische Skalierung und benutzerdefinierte Images. GitHub Actions punktet bei der Integration in das GitHub-Ökosystem und den Aktionsmarktplatz. GitLab CI erfordert für viele Aufgaben manuelle Konfiguration, die GitHub Actions mit vorgefertigten Aktionen löst.

Aus mobiler CI/CD-Perspektive: GitLab CI eignet sich besser für Unternehmen, die bereits GitLab Self-Managed nutzen und selbstgehostete Runner mit Docker/Kubernetes benötigen. GitHub Actions ist praktischer für kleine Teams in der GitHub-Cloud, die vorgefertigte Aktionen und einfache Einrichtung schätzen.

Funktionsvergleich

MerkmalGitLab CIGitHub Actions
Konfiguration.gitlab-ci.yml.github/workflows/*.yml
RunnerSelbstgehostet + gemeinsamGehostet + selbstgehostet
ExecutorsDocker, K8s, ShellVM (Ubuntu, macOS, Win)
AktionsmarktplatzNein (CI-Vorlagen)Marktplatz (15k+ Aktionen)
iOS-BuildmacOS-Runner oder K8smacOS-gehosteter Runner

Beispiel-Pipeline für Android-Projekt

Eine vollständige Android-Pipeline umfasst: Lint, Unit-Tests, Build und Deployment in Firebase App Distribution. Die Pipeline verwendet ein Docker-Image mit Android SDK, Gradle-Caching und parallele Ausführung von Lint und Test in derselben Stage. Dieser Ansatz verkürzt die Gesamtzeit der Pipeline, da Lint- und Testaufgaben voneinander unabhängig sind.

Bei iOS-Projekten unterscheidet sich die Pipeline-Struktur aufgrund der Notwendigkeit eines macOS-Runners und der Codesignierung. Eine typische iOS-Pipeline umfasst: Installation von CocoaPods oder SPM, Ausführung von Tests auf dem Simulator, Archivierung des Xcode-Projekts, Export von IPA und Upload zu TestFlight. GitLab CI für iOS verwendet macOS-Runner — entweder GitLab-SaaS-macOS-Runner mit Zeitbeschränkungen oder einen selbstgehosteten Runner auf einem Mac Mini oder MacStadium.

yaml
image: androidsdk/android-35:latest

stages:
  - lint
  - test
  - build
  - deploy

lint-check:
  stage: lint
  script: ./gradlew lint

unit-tests:
  stage: test
  script: ./gradlew test

assemble-release:
  stage: build
  script: ./gradlew assembleRelease
  artifacts:
    paths: [app/build/outputs/apk/release/]

deploy-firebase:
  stage: deploy
  script:
    - firebase appdistribution:distribute
    --app $FIREBASE_APP_ID
    --token $FIREBASE_TOKEN
    --groups testers

Optimierung der Build-Zeit in GitLab CI

Die Optimierung mobiler Build-Pipelines in GitLab CI erfordert Liebe zum Detail. Die richtige Konfiguration von Cache und Artefakten kann die Build-Zeit um ein Vielfaches reduzieren. Für die Leistungsanalyse bietet GitLab CI/CD Analytics — ein Dashboard mit Metriken zur Pipeline-Dauer, Runner-Auslastung und Engpässen. Analysieren Sie diese Metriken regelmäßig, um Optimierungsmöglichkeiten zu finden. Die Konfiguration von resource_group blockiert parallele Pipeline-Läufe — nützlich zur Vermeidung von Bereitstellungskonflikten.

Die Branch-Strategie für CI ist ebenfalls wichtig. Es wird empfohlen, die vollständige Pipeline nur für Main- und Release-Branches auszuführen und für Feature-Branches nur Lint und Unit-Tests. Das spart Runner-Minuten und beschleunigt das Feedback für Entwickler. GitLab CI unterstützt workflow:rules — bedingte Regeln zum Ein- oder Ausschließen von Jobs basierend auf Branch, geänderten Dateien oder Umgebungsvariablen.

Abhängigkeits-Caching ist die primäre Beschleunigungsmethode. GitLab CI cached .gradle, Pods und node_modules zwischen Läufen. Der Cache-Schlüssel enthält $CI_COMMIT_REF_SLUG oder einen Hash der Lock-Datei. Die Build-Zeit eines Android-Projekts sinkt bei richtigem Caching von 10–15 auf 2–4 Minuten. Der Cache kann verteilt werden — GitLab unterstützt cache:key mit Fallback auf vorherige Schlüssel.

Ein Docker-Image mit vorinstallierten Werkzeugen spart Installationszeit. Es wird empfohlen, ein benutzerdefiniertes Image mit Android SDK, NDK und der erforderlichen API-Ebene zu erstellen. Die parallele Ausführung von Jobs (Lint, Test, Assemble) in verschiedenen Stages reduziert die Gesamt-Pipeline-Zeit. Pull-Richtlinien für Images (if-not-present) beschleunigen den Job-Start. Ein Abhängigkeits-Proxy kann ebenfalls zum Zwischenspeichern von Images auf GitLab-Instanzebene verwendet werden.

Ein weiterer wichtiger Optimierungsaspekt ist die Verwendung von Artefakten zwischen Stufen. Schwere Dateien wie APK und IPA sollten über dependency übergeben werden, anstatt in jedem Job neu erstellt zu werden. Für große Projekte mit Dutzenden von Modulen wird empfohlen, den Gradle Build Cache auf Pipeline-Ebene zu aktivieren und einen Remote-Cache auf gemeinsamem Speicher zu konfigurieren. Das Timeout für jeden Job sollte basierend auf der erwarteten Build-Zeit festgelegt werden — dies verhindert hängende Prozesse.

Beispiel mit Caching und Pull-Richtlinie

yaml
cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - .gradle/
    - app/build/

image:
  name: registry.example.com/android-builder:3.5
  pull_policy: if-not-present

Häufig gestellte Fragen

Was kostet GitLab CI?

Auf GitLab.com beinhaltet der kostenlose Plan 400 CI/CD-Minuten pro Monat und 5 Benutzer. Premium (29 $/Monat) bietet 10.000 Minuten und mehr parallele Jobs. Selbstverwaltetes GitLab hat keine Minutenbegrenzung.

Wie richtet man Android SDK in GitLab CI ein?

Verwenden Sie das vorgefertigte Docker-Image androidsdk/android-35 oder installieren Sie das SDK über sdkmanager in before_script. Geben Sie in den Variablen ANDROID_SDK_ROOT und ANDROID_NDK_HOME für den korrekten Gradle-Betrieb an.

Wie unterscheidet sich GitLab CI von GitHub Actions?

GitLab CI bietet eine integrierte Container Registry, Kubernetes-Integration und selbstgehostete automatische Skalierung. GitHub Actions punktet mit der Anzahl vorgefertigter Aktionen und Einfachheit für kleine Teams.

Kann GitLab CI für iOS-Builds verwendet werden?

Ja, aber iOS erfordert einen macOS-Runner. Sie können GitLab SaaS macOS-Runner (eingeschränkt) verwenden oder einen selbstgehosteten Runner auf einem Mac Mini einrichten. GitLab selbst bietet keine Cloud-macOS-Infrastruktur.

Wie übergibt man Dateien zwischen Jobs in GitLab CI?

Über Artifacts — Dateien eines Jobs werden an einen anderen Job innerhalb der Pipeline übergeben. Über Cache — für Abhängigkeiten zwischen Läufen. Über CI/CD-Variablen — für Zeichenfolgenwerte und Token.

Zusammenfassung

  • GitLab CI — in GitLab integriertes CI/CD-System zur Automatisierung von Build, Test und Deployment mobiler Apps
  • Pipeline besteht aus sequenziell ausgeführten Stages mit parallelen Jobs innerhalb jeder Stage
  • Runner unterstützt Docker-, Shell-, Kubernetes- und VirtualBox-Executors für verschiedene Umgebungen
  • Konfiguration über .gitlab-ci.yml im Repository-Stammverzeichnis mit Image-, Variablen-, Cache- und Job-Abschnitten
  • Caching von Abhängigkeiten über Cache und Artefakten über Artifacts beschleunigt Builds um das 3- bis 5-fache
  • Für iOS ist ein macOS-Runner erforderlich — selbstgehostet oder GitLab SaaS mit eingeschränkter Verfügbarkeit
  • GitLab CI ist am besten für Organisationen geeignet, die GitLab Self-Managed und Kubernetes-Infrastruktur nutzen

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.

Projekt besprechen

Lesen Sie auch