Docker-Build hinzugefügt
Dockerfile (JRE-21-Image mit Zeitzone Europe/Berlin, erwartet ein vorgebautes JAR), .dockerignore und docker_push.sh für den Push in die Registry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
13
.dockerignore
Normal file
13
.dockerignore
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Zugangsdaten duerfen nicht ins Image
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Build-Artefakte und generierte Dateien
|
||||||
|
target/
|
||||||
|
node_modules/
|
||||||
|
src/main/frontend/generated/
|
||||||
|
|
||||||
|
# Repository und IDE
|
||||||
|
.git/
|
||||||
|
.github/
|
||||||
|
.vscode/
|
||||||
|
.DS_Store
|
||||||
12
Dockerfile
Normal file
12
Dockerfile
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
FROM eclipse-temurin:21-jre
|
||||||
|
|
||||||
|
ARG JAR_FILE=target/*.jar
|
||||||
|
|
||||||
|
# Zeitzone auf Berlin setzen und 24h-Format konfigurieren
|
||||||
|
ENV TZ=Europe/Berlin
|
||||||
|
ENV LC_TIME=de_DE.UTF-8
|
||||||
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
|
COPY ${JAR_FILE} app.jar
|
||||||
|
EXPOSE 8080
|
||||||
|
ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=production"]
|
||||||
82
src/docker_push.sh
Normal file
82
src/docker_push.sh
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
readonly REGISTRY_IMAGE="registry.assecutor.org/votianlt"
|
||||||
|
readonly BACKEND_DIR="${SCRIPT_DIR}"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Verwendung:
|
||||||
|
./docker_push.sh [x.y.z]
|
||||||
|
|
||||||
|
Beispiel:
|
||||||
|
./docker_push.sh 0.9.13
|
||||||
|
./docker_push.sh
|
||||||
|
|
||||||
|
Voraussetzungen:
|
||||||
|
- Docker Buildx ist installiert
|
||||||
|
- Login zur Registry wurde bereits ausgeführt:
|
||||||
|
docker login registry.assecutor.org
|
||||||
|
|
||||||
|
Ohne Versionsargument wird automatisch die Version aus der pom.xml verwendet.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo "Fehler: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
require_command() {
|
||||||
|
command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden."
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve_pom_version() {
|
||||||
|
[[ -x "${BACKEND_DIR}/mvnw" ]] || fail "'${BACKEND_DIR}/mvnw' wurde nicht gefunden oder ist nicht ausführbar."
|
||||||
|
|
||||||
|
local version
|
||||||
|
version="$(
|
||||||
|
cd "${BACKEND_DIR}" && ./mvnw -q -DforceStdout help:evaluate -Dexpression=project.version \
|
||||||
|
| awk 'NF { last = $0 } END { print last }'
|
||||||
|
)"
|
||||||
|
|
||||||
|
[[ -n "${version}" ]] || fail "Version konnte nicht aus der pom.xml ermittelt werden."
|
||||||
|
echo "${version}"
|
||||||
|
}
|
||||||
|
|
||||||
|
VERSION="${1:-$(resolve_pom_version)}"
|
||||||
|
|
||||||
|
if [[ "${VERSION}" == "-h" || "${VERSION}" == "--help" ]]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
fail "Versionsnummer muss das Format x.y.z haben."
|
||||||
|
fi
|
||||||
|
|
||||||
|
require_command docker
|
||||||
|
docker buildx version >/dev/null 2>&1 || fail "Docker Buildx ist nicht verfügbar."
|
||||||
|
|
||||||
|
cd "${SCRIPT_DIR}"
|
||||||
|
|
||||||
|
echo "Verwende Release-Version ${VERSION}."
|
||||||
|
echo "Baue Production-JAR für Version ${VERSION} ..."
|
||||||
|
(cd "${BACKEND_DIR}" && ./mvnw -Pproduction -DskipTests -Drevision="${VERSION}" package)
|
||||||
|
|
||||||
|
JAR_FILE_REL="target/votianlt-${VERSION}.jar"
|
||||||
|
JAR_FILE_ABS="${BACKEND_DIR}/${JAR_FILE_REL}"
|
||||||
|
[[ -f "${JAR_FILE_ABS}" ]] || fail "Release-JAR wurde nicht gefunden: ${JAR_FILE_ABS}"
|
||||||
|
|
||||||
|
echo "Pushe Image ${REGISTRY_IMAGE}:${VERSION} ..."
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64 \
|
||||||
|
-f "${BACKEND_DIR}/Dockerfile" \
|
||||||
|
--build-arg "JAR_FILE=${JAR_FILE_REL}" \
|
||||||
|
-t "${REGISTRY_IMAGE}:${VERSION}" \
|
||||||
|
--push \
|
||||||
|
"${BACKEND_DIR}"
|
||||||
|
|
||||||
|
echo "Fertig: ${REGISTRY_IMAGE}:${VERSION}"
|
||||||
@@ -152,7 +152,6 @@ public class MainView extends VerticalLayout {
|
|||||||
if (event.isFromClient() && event.getValue() != null) {
|
if (event.isFromClient() && event.getValue() != null) {
|
||||||
loadDraft(event.getValue());
|
loadDraft(event.getValue());
|
||||||
} else if (event.isFromClient()) {
|
} else if (event.isFromClient()) {
|
||||||
// Auswahl entfernt: es gilt wieder "keine Vorbelegung geladen".
|
|
||||||
loadedDraftState = null;
|
loadedDraftState = null;
|
||||||
updateSaveDraftEnabled();
|
updateSaveDraftEnabled();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user