Zum Inhalt

GitHub CI Einführung

GitHub CI/CD (Continuous Integration/Continuous Deployment) ist eine leistungsstarke Plattform, die es Entwicklern ermöglicht, automatisierte Workflows für das Bauen, Testen und Bereitstellen von Anwendungen direkt aus ihren GitHub-Repositories zu erstellen.

Mit GitHub Actions können Sie benutzerdefinierte CI/CD-Pipelines erstellen, die auf Ereignisse in Ihrem Repository reagieren, wie z.B. Code-Pushes oder Pull-Requests.

Erste Schritte mit GitHub CI/CD

  1. Repository vorbereiten:
    Stellen Sie sicher, dass Ihr Code in einem GitHub-Repository gehostet wird.
  2. Workflow-Datei erstellen:
    Sie müssen Ihrem Projekt eine Workflow-Datei hinzufügen.
    Erstellen Sie im Verzeichnis .github/workflows zBsp die YAML-Datei myfirstworkflow.yml.
  3. Aktionen hinzufügen:
    Fügen Sie in Ihrer Workflow-Datei die gewünschten GitHub Actions hinzu, um den Build-, Test- und Deploy-Prozess zu automatisieren.
    Typischer Workflow
    • on: -> wann wird der Workflow ausgelöst: zBsp durch push auf masterbrunch
    • jobs mit verschiedenen steps:
      • Repo auschecken
      • QEMU Emulator für cross-compiling einrichten
      • Build ausführen
      • Tests ausführen
      • Deployment durchführen - Auf Image-Registry einloggen - Image bauen und pushen
  4. Secrets konfigurieren:
    Wenn Ihr Workflow sensible Informationen wie API-Schlüssel oder Zugangsdaten benötigt, speichern Sie diese als "Secrets" in den Repository-Einstellungen.
    Secrets sind verschlüsselte Umgebungsvariablen, die in Workflows verwendet werden können, ohne dass sie im Code des Repositories sichtbar sind.
  5. Workflow ausführen:
    Sobald Sie Ihre Workflow-Datei committet haben, wird der Workflow automatisch ausgeführt, wenn das definierte Ereignis eintritt.
    Die Ausführung kann unter dem Reiter "Actions" in Ihrem GitHub-Repository überwacht werden. Allfällige Fehler können dort eingesehen und und dann in der Workflow-Datei behoben werden.

Beispiel Workflow für ein Spring-Boot-Projekt

Erläuterung zu den Teilen der Workflow-Datei:

  • name: Der Name des Workflows, der in der GitHub-Oberfläche angezeigt wird.
  • on: Definiert die Ereignisse, die den Workflow auslösen. In diesem Fall wird der Workflow bei Push- und Pull-Request-Ereignissen auf dem main-Branch ausgelöst.
  • jobs: Eine Sammlung von Jobs, die im Workflow ausgeführt werden. Jeder Job kann mehrere Schritte enthalten.
  • build: Der Name des Jobs, der den Build-Prozess definiert.
  • runs-on: Gibt die Umgebung an, in der der Job ausgeführt wird. In diesem Fall wird ubuntu-latest verwendet.
  • steps: Eine Liste von Schritten, die im Job ausgeführt werden. Jeder Schritt kann eine Aktion oder ein Befehl sein.
name: Java CI (modern)

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

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'   # Alternativ: zulu, microsoft, etc.
          java-version: '11'        # Oder '17', je nach Projektanforderung
          cache: 'maven'            # Aktiviert Maven-Abhängigkeits-Cache
      - name: Build & Test
        run: mvn -B -ntp verify     # Batch-Mode (-B), kein Transfer-Progress (-ntp)

Detaillierte Erklärung der Steps

  1. Checkout Code:

    - uses: actions/checkout@v4
    
    Dieser Schritt verwendet die actions/checkout-Action, um den Code aus dem Repository in die Laufzeitumgebung zu klonen. Dies ist notwendig, damit die nachfolgenden Schritte auf den Quellcode zugreifen können.
    GitHub Actions stellt diese Action bereit, um den Checkout-Prozess zu vereinfachen.
    siehe unten.
  2. JDK einrichten:

    - name: Set up JDK
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'   # Alternativ: zulu, microsoft, etc.
        java-version: '11'        # Oder '17', je nach Projektanforderung
        cache: 'maven'            # Aktiviert Maven-Abhängigkeits-Cache
    
    Dieser Schritt richtet die Java-Entwicklungsumgebung ein, indem er die angegebene JDK-Version installiert. Die Option cache: 'maven' sorgt dafür, dass Maven-Abhängigkeiten zwischengespeichert werden, um die Build-Zeit zu verkürzen.
  3. Build & Test:
    - name: Build & Test
      run: mvn -B -ntp verify     # Batch-Mode (-B), kein Transfer-Progress (-ntp)
    
    In diesem Schritt wird der Maven-Befehl mvn verify ausgeführt, um das Projekt zu bauen und die Tests durchzuführen. Die Flags -B (Batch-Mode) und -ntp (kein Transfer-Progress) optimieren die Ausgabe für CI-Umgebungen.

Github Actions

GitHub Actions sind wiederverwendbare Bausteine für CI/CD-Workflows.
Jede Action übernimmt eine bestimmte Aufgabe — etwa Code auschecken, Tests ausführen, Docker-Images bauen oder Releases erstellen.

Beispiel:

- name: Checkout repository
  uses: actions/checkout@v4

Typische / häufig genutzte Actions

Zweck Action Kurzbeschreibung
Code aus Repo holen actions/checkout@v4 Lädt das Repository in den Runner
Node.js Umgebung actions/setup-node@v4 Installiert Node.js & npm
Java Umgebung actions/setup-java@v4 Installiert JDK & Maven/Gradle
Python Umgebung actions/setup-python@v5 Installiert Python
Docker Login docker/login-action@v3 Meldet sich bei Docker Hub oder GHCR an
Docker Build docker/build-push-action@v5 Baut und pusht Docker-Images
Multi-Arch Build docker/setup-qemu-action@v3 Aktiviert QEMU für Cross-Builds
Multi-Platform docker/setup-buildx-action@v3 Aktiviert Docker Buildx
Tests ausführen actions/setup-node + npm test oder actions/setup-java + mvn test Testläufe
Benachrichtigungen actions/github-script oder slackapi/slack-github-action Skripte oder Slack-Nachrichten senden
Secrets & Signing sigstore/cosign-installer Container signieren
Releases softprops/action-gh-release Automatisch GitHub Release erstellen

Weitere Actions finden

https://github.com/marketplace?type=actions

Jede Action-Seite zeigt:

  • Beschreibung
  • Beispielcode
  • Eingabeparameter (with:)
  • Ausgaben (id: / ${{ steps.xyz.outputs.value }})

Vorbereitete Workflow-Vorlagen

Wählt man: Repository → Reiter Actions“New workflow”
So schlägt GitHub vorgefertigte Vorlagen für Node, Java, Python, Docker etc. vor.
Diese können als Ausgangspunkt für eigene Workflows verwendet werden.

Hilfen im Netz

Es gibt zahlreiche Ressourcen und Communities, die Unterstützung bei der Arbeit mit GitHub CI/CD bieten: