1. JAR-Typ anpassen
Wenn wir ein Package erstellen, wollen wir ein Uber-JAR bekommen, da es bereits alle benötigten Libraries enthält und nichts vorinstalliert sein muss.
quarkus.package.jar.type=uber-jar
2. Dockerfile
Wir verwenden folgendes Dockerfile für unsere Quarkus-Applikation und speichern es in src/main/docker
FROM eclipse-temurin:21-jre
RUN mkdir -p /opt/application
COPY target/*-runner.jar /opt/application/backend.jar
WORKDIR /opt/application
CMD ["java", "-jar", "backend.jar"]
3. Workflow-Datei
-
Im Root-Verzeichnis des GitHub-Repositories das Verzeichnis
.github
mit dem Unterverzeichnisworkflows
erstellen. In diesem Ordner kommen alle Workflow-Konfigurationsdateien hinein. -
Darin ertellen wir eine neue Datei, z.B.
build-quarkus-image.yaml
.
name: GitHub Actions - Building Docker Images from Quarkus Project
run-name: ${{ github.actor }} is building Docker Images 🐋 using GitHub Actions 🚀
on: [push]
jobs:
build:
permissions: write-all
runs-on: ubuntu-latest
steps:
- name: Make Actor and Repo lowercase (1)
run: |
echo "ACTOR_LC=$(echo ${GITHUB_ACTOR} | tr '[:upper:]' '[:lower:]')" >>${GITHUB_ENV}
echo "REPO_LC=$(echo ${GITHUB_REPOSITORY} | tr '[:upper:]' '[:lower:]')" >>${GITHUB_ENV}
- name: Use ACTOR_LC and REPO_LC (2)
run: |
echo ${{ env.ACTOR_LC }}
echo ${{ env.REPO_LC }}
- name: Check out repository code (3)
uses: actions/checkout@v4
- name: Set up JDK 21 LTS (4)
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'
- name: Build with Maven (5)
run: mvn -f microprofile-health-demo/pom.xml clean package -Dmaven.test.skip=true
- name: Login to GitHub Container Registry (6)
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ env.ACTOR_LC }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push (7)
uses: docker/build-push-action@v5
with:
context: ./microprofile-health-demo (8)
file: ./microprofile-health-demo/src/main/docker/Dockerfile (9)
platforms: linux/amd64
push: true
tags: ghcr.io/${{ env.REPO_LC }}/mp-health-demo:latest (10)
-
Um Probleme mit Groß-/Kleinschreibung entgegenzuwirken, benutzen wir für den Actor und den Repository-Namen ausschließlich Kleibuchstaben. Diese werden als Umgebungsvariablen gespeichert.
-
Test-Ausgabe des Actors und des Repositories.
-
Das Repository wird hier auf den Runner ausgecheckt.
-
Am Runner wird Temurin 21 LTS installiert.
-
Hier wird ein Package aus dem Maven-Projekt erstellt. Hierbei ist aufzupassen, den Pfad zur
pom.xml
richtig zu setzen. -
Anmeldung in der GitHub Container Registry mit unseren GitHub-Credentials.
-
Hier wird das Docker Image gebaut und in die Registry gepusht. Dabei gibt es einiges zu beachten:
-
Als
context
muss das Root-Verzeichnis des Maven-Projektes angegeben werden. -
Als
file
wird das Dockerfile des Maven-Projektes angegeben (normalerweise insrc/main/docker
) -
Hier wird festgelegt, wohin genau das Image gepusht werden soll (normalerweise ins Repository des Projektes).