1. Übersicht

Dieses Projekt wurde als Tutorial für GitHub Actions entwickelt und enthält vier von mir erstellte GitHub Action-Skripte sowie Erläuterungen zu deren Funktionsweise und Einsatz.

2. Überblick über das Projektziel und die Umsetzung

Das Ziel dieses Projekts ist es, den Einsatz von GitHub Actions auf einfache und nachvollziehbare Weise zu demonstrieren. Dabei soll vor allem verständlich werden, warum und wie man GitHub Actions im Entwicklungsprozess einsetzt.

Viele Entwickler:innen starten damit, ihre Anwendungen lokal zu bauen und zu testen. Anfangs funktioniert das auch gut: Man führt Build- und Test-Skripte manuell aus, startet Container lokal und überprüft die Funktionalität der Anwendung. Doch je größer ein Projekt wird, desto fehleranfälliger und zeitaufwendiger wird dieser manuelle Prozess.

Hier kommt GitHub Actions ins Spiel: Es erlaubt, wiederkehrende Aufgaben wie Build, Test und Deployment zu automatisieren – direkt aus dem Repository heraus. Anstatt alles selbst zu scripten und lokal auszuführen, nutzen wir standardisierte Workflows, die zuverlässig und reproduzierbar arbeiten. Viele dieser Schritte lassen sich sogar über vorgefertigte Actions aus dem GitHub Marketplace einbinden.

Im Verlauf dieses Tutorials wirst du lernen:

  • warum Automatisierung im Projektalltag wichtig ist,

  • wie du ein Java-Projekt zuerst lokal aufbaust und testest,

  • wie man diese Schritte zunächst manuell in Bash ausführt,

  • und wie daraus Schritt für Schritt eine GitHub Actions-Pipeline entsteht.

Konkret erstellen wir eine GitHub Actions-Pipeline, die:

  • ein Maven-basiertes Java-Projekt automatisch baut und testet,

  • ein Docker-Image für die Anwendung sowie für eine H2-Datenbank erzeugt,

  • die erstellten Images in der Container Registry ghcr.io speichert,

  • und das Anwendung-Image anschließend auf einer virtuellen Maschine bereitstellt.

Das Ergebnis ist dann ein automatisiertes CI/CD-Deployment.

3. Voraussetzungen

Um diesem Tutorial folgen zu können, solltest du bereits über grundlegende Kenntnisse in den folgenden Bereichen verfügen:

  • Grundverständnis von GitHub Actions

Du solltest bereits eine Vorstellung davon haben, wie GitHub Actions grundsätzlich funktionieren. Falls du eine Auffrischung brauchst, kannst du dir gerne mein vorheriges Tutorial ansehen, in welchem der grundlegende Skript-Aufbau erklärt wird: GitHub Actions Grundkenntnisse

  • Funktionierendes Quarkus-Projekt mit Maven

Du benötigst ein funktionierendes Java-Projekt, das mit Quarkus und Maven aufgebaut ist. Dieses Projekt sollte bereits als GitHub-Repository vorhanden sein.

  • Docker & Docker Compose

Dein Projekt sollte mit Docker und Docker Compose lauffähig sein – einschließlich aller Dienste wie Datenbank und Anwendung. Auch ein NGINX-Reverse-Proxy sollte Bestandteil des Setups sein.

  • Rechte zum Verwalten von GitHub Packages

Du solltest in der Lage sein, ein Package (Docker-Image) in GitHub Packages (ghcr.io) zu erstellen, zu bearbeiten und auf public zu stellen.

  • Virtuelle Maschine mit SSH-Zugriff

Für das Deployment wird eine VM benötigt, auf die du per SSH zugreifen kannst.

Hierfür gibt es schon ein Tutorial des Herrn Professoren Stütz
  • Grundkenntnisse in Docker, SSH und Bash

Es wird vorausgesetzt, dass du dich zumindest grundlegend mit Docker, dem Arbeiten über SSH sowie mit Bash-Skripten auskennst, da diese Technologien im Laufe des Tutorials verwendet werden.

3.1. Beispielprojekt zum Einstieg

Falls du kein eigenes Quarkus-Projekt zur Verfügung hast oder dir die Einrichtung ersparen möchtest, kannst du auch das bereits vorbereitete Beispielprojekt verwenden.

Dieses Projekt ist vollständig konfiguriert:

  • Es basiert auf Quarkus und verwendet Maven.

  • Es ist vollständig mit Docker und Docker Compose ausgestattet – inklusive Datenbank und NGINX-Reverse-Proxy.

Das Projekt ist in meinem GitHub Repository unter dem Tutorial Demo-Branch verfügbar. Diesen kann man sich einfach als zip-Datei herunterladen, diese lokal entpacken und in ein eigenes Repo-hochladen.

Weitere Informationen zu dem Projekt sind hier zu finden.

Wenn du bereits ein eigenes Projekt hast, das diesen Anforderungen entspricht, kannst du natürlich auch damit weiterarbeiten.

4. Enthaltene Skripte

  • build-docker.yaml

    • Dieses Skript erstellt zwei Docker-Images - eines für eine H2-Datenbank und eines für ein Maven-basiertes Java-Projekt - und pusht diese in die Container Registry ghcr.io.

  • build-and-deploy.yaml

    • Dieses Skript startet das zuvor erstellte Docker-Image per SSH auf einer virtuellen Maschine mithilfe von Docker Compose.

    • Alle erforderlichen Zugangsdaten sind als Secrets in GitHub gespeichert.

  • release-artifacts.yaml

    • Dieses Skript erstellt ein Prerelease auf GitHub. Dabei werden alle Commits seit dem letzten Release zusammengefasst und mit den Commit-Nachrichten sowie dem .jar-Artefakt der Maven-Java-Anwendung veröffentlicht.

  • release-artifacts-debug-demo.yaml

    • Dieses Skript basiert auf dem vorherigen und erstellt ebenfalls alle relevanten Informationen. Anstelle eines Releases wird jedoch mithilfe von tmate eine SSH-Verbindung zum GitHub Actions Runner aufgebaut, um das Skript interaktiv debuggen zu können.

5. Tutorial

Somit kann jetzt das Tutorial gestartet werden: Tutorial starten

6. Tutorial-Demo-Info

Informationen zu meinem Beispielprojekt: hier

7. CI/CD

Informationen zu meinem CI/CD: hier

8. GitHub Actions - Workflows

Informationen zu GitHub Actions - Workflows: hier