Add Azure SSO bootstrap
Create a client registration from AZURE_* environment variables and disable SSO cleanly when no registration is available. Add a docker_push.sh helper for building and publishing production images.
This commit is contained in:
97
docker_push.sh
Executable file
97
docker_push.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
readonly PROJECT_DIR="${SCRIPT_DIR}"
|
||||
readonly DEFAULT_REGISTRY_IMAGE="registry.assecutor.org/emulatorstation"
|
||||
readonly REGISTRY_IMAGE="${REGISTRY_IMAGE:-${DEFAULT_REGISTRY_IMAGE}}"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Verwendung:
|
||||
./docker_push.sh [x.y.z]
|
||||
|
||||
Beispiele:
|
||||
./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
|
||||
|
||||
Hinweise:
|
||||
- Ohne Versionsargument wird die Version aus der pom.xml als Docker-Tag verwendet.
|
||||
- Das JAR wird immer mit der aktuellen Projektversion aus der pom.xml gebaut.
|
||||
- Das Ziel-Image kann optional per Umgebungsvariable überschrieben werden:
|
||||
REGISTRY_IMAGE=registry.assecutor.org/mein-image ./docker_push.sh
|
||||
EOF
|
||||
}
|
||||
|
||||
fail() {
|
||||
echo "Fehler: $*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
require_command() {
|
||||
command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden."
|
||||
}
|
||||
|
||||
build_production_jar() {
|
||||
echo "Baue Production-JAR ${JAR_FILE_REL} ..."
|
||||
(
|
||||
cd "${PROJECT_DIR}" && ./mvnw -Pproduction -DskipTests clean package
|
||||
)
|
||||
|
||||
[[ -f "${JAR_FILE_ABS}" ]] || fail "Production-JAR wurde nicht gefunden: ${JAR_FILE_ABS}"
|
||||
}
|
||||
|
||||
resolve_pom_value() {
|
||||
local expression="$1"
|
||||
|
||||
[[ -x "${PROJECT_DIR}/mvnw" ]] || fail "'${PROJECT_DIR}/mvnw' wurde nicht gefunden oder ist nicht ausführbar."
|
||||
|
||||
local value
|
||||
value="$(
|
||||
cd "${PROJECT_DIR}" && ./mvnw -q -DforceStdout help:evaluate -Dexpression="${expression}" \
|
||||
| awk 'NF { last = $0 } END { print last }'
|
||||
)"
|
||||
|
||||
[[ -n "${value}" ]] || fail "Wert '${expression}' konnte nicht aus der pom.xml ermittelt werden."
|
||||
echo "${value}"
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
readonly PROJECT_VERSION="$(resolve_pom_value project.version)"
|
||||
readonly ARTIFACT_ID="$(resolve_pom_value project.artifactId)"
|
||||
readonly IMAGE_TAG="${1:-${PROJECT_VERSION}}"
|
||||
|
||||
if [[ ! "${IMAGE_TAG}" =~ ^[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."
|
||||
|
||||
readonly JAR_FILE_REL="target/${ARTIFACT_ID}-${PROJECT_VERSION}.jar"
|
||||
readonly JAR_FILE_ABS="${PROJECT_DIR}/${JAR_FILE_REL}"
|
||||
|
||||
cd "${PROJECT_DIR}"
|
||||
|
||||
echo "Verwende Build-Version ${PROJECT_VERSION} und Image-Tag ${IMAGE_TAG}."
|
||||
build_production_jar
|
||||
|
||||
echo "Pushe Image ${REGISTRY_IMAGE}:${IMAGE_TAG} ..."
|
||||
docker buildx build \
|
||||
--platform linux/amd64 \
|
||||
-f "${PROJECT_DIR}/Dockerfile" \
|
||||
-t "${REGISTRY_IMAGE}:${IMAGE_TAG}" \
|
||||
--push \
|
||||
"${PROJECT_DIR}"
|
||||
|
||||
echo "Fertig: ${REGISTRY_IMAGE}:${IMAGE_TAG}"
|
||||
Reference in New Issue
Block a user