CI/CD für Kotlin-Projekte: GitHub Actions von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in CI/CD für Kotlin mit GitHub Actions

In der modernen Softwareentwicklung ist die Automatisierung von Build-, Test- und Deployment-Prozessen zu einem wesentlichen Bestandteil professioneller Arbeitsweisen geworden. Für Kotlin-Projekte, seien es Android-Apps, Backend-Dienste mit Ktor oder plattformübergreifende Bibliotheken, ermöglicht die Einrichtung von CI/CD (Continuous Integration / Continuous Deployment) eine deutliche Verkürzung der Time-to-Market und reduziert das Fehlerrisiko.

GitHub Actions ist ein leistungsstarkes und flexibles Tool, das in die GitHub-Ökosystem integriert ist. Es ermöglicht die Erstellung benutzerdefinierter Pipelines, die automatisch bei Pushes, der Erstellung von Pull-Requests oder nach einem Zeitplan ausgeführt werden. In diesem Artikel werden wir den gesamten Zyklus der CI/CD-Einrichtung für Kotlin durchgehen: von der grundlegenden Code-Überprüfung bis zum automatischen Deployment.



Grundlagen von GitHub Actions: Struktur und Syntax

Bevor wir uns in Kotlin-spezifische Details stürzen, ist es wichtig, die grundlegenden Konzepte von GitHub Actions zu verstehen. Die Pipeline wird in YAML-Dateien beschrieben, die im Verzeichnis .github/workflows/ Ihres Repositorys gespeichert werden.



Schlüsselelemente eines Workflows

  • Event (Ereignis): Der Auslöser, der die Pipeline startet (push, pull_request, release usw.).
  • Job (Aufgabe): Eine Reihe von Schritten, die auf einem einzigen Runner (virtuellen Maschine) ausgeführt werden.
  • Step (Schritt): Eine spezifische Aktion – Ausführen eines Befehls, Starten eines Skripts oder Verwenden eines vorgefertigten Actions.
  • Runner: Die Ausführungsumgebung (Ubuntu, Windows, macOS).


Grundlegende Struktur der Datei kotlin-ci.yml:

name: Kotlin CI

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Build with Gradle run: ./gradlew build


CI-Einrichtung für Kotlin: Build, Tests und Linting

Der erste und wichtigste Schritt ist die kontinuierliche Integration. Sie stellt sicher, dass jeder neue Code kompiliert und bestehende Tests nicht beschädigt.



Caching von Gradle-Abhängigkeiten

Um den Build zu beschleunigen, sollten Sie unbedingt Caching verwenden. Ohne Caching würde jeder Lauf alle Bibliotheken erneut herunterladen.

- name: Cache Gradle packages  uses: actions/cache@v3  with:    path: |      ~/.gradle/caches      ~/.gradle/wrapper    key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}    restore-keys: |      ${{ runner.os }}-gradle-


Tests ausführen und Code-Stil prüfen

Fügen wir Schritte zum Ausführen von Unit-Tests und Linter (detekt oder ktlint) hinzu. Dies hilft, die Codequalität zu erhalten.

- name: Run tests  run: ./gradlew test

- name: Run linter run: ./gradlew detekt


Beispiel eines vollständigen CI-Workflows für ein Kotlin-Projekt

jobs:  test:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - name: Set up JDK 17        uses: actions/setup-java@v4        with:          java-version: '17'          distribution: 'temurin'      - name: Cache Gradle        uses: actions/cache@v3        with:          path: ~/.gradle/caches          key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}      - name: Build and test        run: ./gradlew check


Continuous Deployment: Automatisches Deployment von Kotlin-Anwendungen

Nach erfolgreicher Integration folgt die Deployment-Phase. Für Kotlin-Projekte kann dies die Veröffentlichung einer Bibliothek in Maven Central, das Bereitstellen eines Backends auf einem Server oder das Erstellen einer APK für Android bedeuten.



Deployment eines Backend-Dienstes mit Ktor

Angenommen, wir haben eine Kotlin-Anwendung mit dem Framework Ktor. Wir möchten sie automatisch

Blogs

Buchempfehlungen