From ea1a4375e2bf944efa2df4300609ae8b3e251ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Walther?= Date: Sun, 11 Jan 2026 18:20:28 +0100 Subject: [PATCH] docs: add build step to Gitea Action and Dockerfile --- docs/softwareentwicklung/kotlin_setup.md | 82 +++++++++++++----------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/docs/softwareentwicklung/kotlin_setup.md b/docs/softwareentwicklung/kotlin_setup.md index b7ce8cbc..6063c868 100644 --- a/docs/softwareentwicklung/kotlin_setup.md +++ b/docs/softwareentwicklung/kotlin_setup.md @@ -33,77 +33,86 @@ sdk install kotlin ## Docker Setup (Oracle Linux 10) -Hier ist ein Beispiel für ein Dockerfile, das auf **Oracle Linux 10** basiert und **Java 25** sowie **Kotlin** installiert. +Hier ist ein Beispiel für ein Dockerfile, das auf **Oracle Linux 10** basiert. Es verwendet einen **Multi-Stage Build**, um erst die Anwendung zu bauen und dann ein schlankes Runtime-Image zu erstellen. ```dockerfile -# Basis-Image: Oracle Linux 10 -FROM oraclelinux:10 +# --- Stage 1: Build --- +FROM oraclelinux:10 AS builder -# Metadaten -LABEL maintainer="rwcloud.ch" -LABEL description="Kotlin Development Environment on Oracle Linux 10 with Java 25" +RUN dnf -y install tar gzip unzip curl && dnf clean all -# System-Updates und Installation von Abhängigkeiten -RUN dnf -y update && \ - dnf -y install tar gzip unzip curl && \ - dnf clean all - -# Installation von Java 25 (Beispielpfad/Download) -# Hinweis: Da Java 25 zum Erstellungszeitpunkt noch neu ist, -# muss hier ggf. die URL angepasst werden. +# Java 25 für den Build RUN curl -L -o /tmp/openjdk.tar.gz https://download.java.net/java/GA/jdk25/archive/openjdk-25_linux-x64_bin.tar.gz && \ mkdir -p /usr/java && \ tar -xzf /tmp/openjdk.tar.gz -C /usr/java && \ rm /tmp/openjdk.tar.gz -# Umgebungsvariablen setzen ENV JAVA_HOME=/usr/java/jdk-25 ENV PATH=$JAVA_HOME/bin:$PATH -# Kotlin Compiler installieren -ENV KOTLIN_VERSION=2.1.0 -RUN curl -L -o /tmp/kotlin-compiler.zip https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_VERSION}/kotlin-compiler-${KOTLIN_VERSION}.zip && \ - unzip /tmp/kotlin-compiler.zip -d /opt && \ - rm /tmp/kotlin-compiler.zip +WORKDIR /build +COPY . . -ENV PATH=$PATH:/opt/kotlinc/bin +# Build der Applikation (angenommen es wird Gradle verwendet) +# Falls kein Wrapper vorhanden ist, müsste Gradle hier installiert werden +RUN ./gradlew build --no-daemon + +# --- Stage 2: Runtime --- +FROM oraclelinux:10 + +RUN dnf -y install tar gzip && dnf clean all + +# Java 25 Runtime +RUN curl -L -o /tmp/openjdk.tar.gz https://download.java.net/java/GA/jdk25/archive/openjdk-25_linux-x64_bin.tar.gz && \ + mkdir -p /usr/java && \ + tar -xzf /tmp/openjdk.tar.gz -C /usr/java && \ + rm /tmp/openjdk.tar.gz + +ENV JAVA_HOME=/usr/java/jdk-25 +ENV PATH=$JAVA_HOME/bin:$PATH -# Arbeitsverzeichnis WORKDIR /app -# Beispiel-Anwendung kopieren (falls vorhanden) -# COPY . /app +# Nur die gebaute JAR aus dem Builder-Stage kopieren +COPY --from=builder /build/build/libs/*.jar app.jar -# Test der Installation -RUN java -version && kotlinc -version - -CMD ["bash"] +EXPOSE 8080 +CMD ["java", "-jar", "app.jar"] ``` --- ## Gitea Action (CI/CD) -Um das obige Docker-Image automatisch zu bauen und in eine Registry zu pushen, kannst du folgende Gitea Action (`.gitea/workflows/build-kotlin-image.yml`) verwenden. +Um die Applikation automatisch zu bauen und das Docker-Image zu erstellen, kannst du folgende Gitea Action (`.gitea/workflows/build-and-deploy.yml`) verwenden. In diesem Beispiel nutzen wir die Action auch für den Test und Build vor dem Docker-Schritt. ```yaml -name: Build and Push Kotlin Image +name: Build and Push Kotlin App on: push: branches: - main - paths: - - 'Dockerfile' - - '.gitea/workflows/**' jobs: - build-and-push: + build: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v4 + - name: Set up JDK 25 + uses: actions/setup-java@v4 + with: + java-version: '25' + distribution: 'oracle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Build with Gradle + run: ./gradlew build + - name: Set up Docker Buildx uses: actions/setup-buildx-action@v3 @@ -114,12 +123,11 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITEA_TOKEN }} - - name: Build and Push + - name: Build and Push Docker Image uses: actions/docker-build-push-action@v5 with: context: . push: true tags: | - gitea.rwcloud.ch/${{ github.repository }}/kotlin-dev:latest - gitea.rwcloud.ch/${{ github.repository }}/kotlin-dev:ol10-java25 + gitea.rwcloud.ch/${{ github.repository }}/kotlin-app:latest ```