new version

This commit is contained in:
2025-09-28 13:50:13 +02:00
parent 1dfb71b1d3
commit b216fb5fce

View File

@@ -5,8 +5,8 @@ IFS=$'\n\t'
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
CONFIG_DIR="$ROOT_DIR/config" CONFIG_DIR="$ROOT_DIR/config"
GLOBAL_CONFIG="$CONFIG_DIR/global/config.json" GLOBAL_CONFIG="$CONFIG_DIR/global/config.json"
PROJECTS_DIR="$ROOT_DIR/projects" PROJECTS_DIR="./projects"
PROJECT_CONFIG_DIR="$CONFIG_DIR/projects" PROJECT_CONFIG_DIR="./config/projects"
REGISTRY_CONFIG_DIR="$CONFIG_DIR/registries" REGISTRY_CONFIG_DIR="$CONFIG_DIR/registries"
LOGS_DIR="$ROOT_DIR/logs" LOGS_DIR="$ROOT_DIR/logs"
@@ -598,184 +598,82 @@ EOF
# Projektparameter laden # Projektparameter laden
load_project_config() { load_project_config() {
local config_file="$1" local config_file="$1"
if [[ -f "$config_file" ]]; then registry=$(grep "^registry=" "$config_file" | cut -d= -f2)
echo "Lade Konfiguration aus $config_file" image_name=$(grep "^image_name=" "$config_file" | cut -d= -f2)
image_name=$(grep "^image_name=" "$config_file" | cut -d= -f2) architectures=$(grep "^architectures=" "$config_file" | cut -d= -f2)
dockerfile=$(grep "^dockerfile=" "$config_file" | cut -d= -f2) push=$(grep "^push=" "$config_file" | cut -d= -f2)
context=$(grep "^context=" "$config_file" | cut -d= -f2) version=$(grep "^version=" "$config_file" | cut -d= -f2)
version=$(grep "^version=" "$config_file" | cut -d= -f2) latest=$(grep "^latest=" "$config_file" | cut -d= -f2)
architectures=$(grep "^architectures=" "$config_file" | cut -d= -f2) git_repo=$(grep "^git_repo=" "$config_file" | cut -d= -f2)
registry=$(grep "^registry=" "$config_file" | cut -d= -f2) auto_subversion=$(grep "^auto_subversion=" "$config_file" | cut -d= -f2 || echo "no")
push=$(grep "^push=" "$config_file" | cut -d= -f2)
latest=$(grep "^latest=" "$config_file" | cut -d= -f2)
auto_subversion=$(grep "^auto_subversion=" "$config_file" | cut -d= -f2)
architectures="${architectures//,/ }"
architectures=$(echo "$architectures" | xargs)
echo "Geladen: image=$image_name, version=$version, archs=$architectures, registry=$registry"
else
echo "Konfigurationsdatei $config_file nicht gefunden!"
exit 1
fi
} }
# Image bauen
# Gibt die URL einer Registry anhand des Config-Files zurück
get_registry_url() {
local reg=$1
local reg_file="$REGISTRY_CONFIG_DIR/$reg/config-file"
if [[ ! -f "$reg_file" ]]; then
echo ""
return
fi
grep -E '^url=' "$reg_file" | cut -d'=' -f2-
}
# Führt docker login für eine Registry anhand des Config-Files aus
registry_login() {
local reg=$1
local reg_file="$REGISTRY_CONFIG_DIR/$reg/config-file"
if [[ ! -f "$reg_file" ]]; then
echo "Registry-Konfiguration '$reg' fehlt!"
return 1
fi
local url username password
url=$(grep -E '^url=' "$reg_file" | cut -d'=' -f2-)
username=$(grep -E '^username=' "$reg_file" | cut -d'=' -f2-)
password=$(grep -E '^password=' "$reg_file" | cut -d'=' -f2-)
if [[ -z "$url" || -z "$username" || -z "$password" ]]; then
echo "Ungültige Registry-Konfig für $reg (url/username/password fehlt)!"
return 1
fi
echo "$password" | docker login "$url" -u "$username" --password-stdin
}
# Docker-Image bauen
build_image() { build_image() {
local project=$1 local project=$1
local config_file="$PROJECT_CONFIG_DIR/$project/config-file" local config_file="$PROJECT_CONFIG_DIR/$project/config-file"
# ---- Konfiguration laden ----
load_project_config "$config_file" load_project_config "$config_file"
# Prüfen, ob Registry gesetzt ist # Build-Parameter aus Config
if [[ -z "$registry" ]]; then local regs=()
echo "Keine Registry definiert! Build abgebrochen." IFS=',' read -r -a regs <<< "$registry" # Registries als Array
whiptail --msgbox "Keine Registry definiert für Projekt $project. Build abgebrochen." 10 60 local tags=()
return 1 for r in "${regs[@]}"; do
fi [[ -n "$r" ]] && tags+=("-t $r/$image_name:$version")
# Architekturen prüfen
if [[ -z "$architectures" ]]; then
echo "Keine Architekturen definiert! Build abgebrochen."
whiptail --msgbox "Keine Architekturen definiert für Projekt $project. Build abgebrochen." 10 60
return 1
fi
local timestamp logfile
timestamp=$(date +"%Y%m%d_%H%M%S")
logfile="$LOGS_DIR/${project}_${timestamp}.log"
echo "==== Build gestartet: $(date) ====" | tee -a "$logfile"
echo "Projekt: $project" | tee -a "$logfile"
echo "Registry: $registry" | tee -a "$logfile"
echo "Image: $image_name" | tee -a "$logfile"
echo "Architekturen: $architectures" | tee -a "$logfile"
echo "Push: $push" | tee -a "$logfile"
echo "Version: $version" | tee -a "$logfile"
echo "Latest: $latest" | tee -a "$logfile"
echo "====================================" | tee -a "$logfile"
# ---- Plattformen vorbereiten ----
local platforms arch_array
read -r -a arch_array <<< "${architectures//,/ }"
platforms=""
for arch in "${arch_array[@]}"; do
case "$arch" in
amd64) platforms+="linux/amd64," ;;
arm64) platforms+="linux/arm64," ;;
armhf) platforms+="linux/arm/v7," ;;
x86) platforms+="linux/386," ;;
*) echo "WARNUNG: Unbekannte Architektur '$arch' wird ignoriert." | tee -a "$logfile" ;;
esac
done
platforms="${platforms%,}" # letztes Komma entfernen
if [[ -z "$platforms" ]]; then
echo "Keine gültigen Architekturen gefunden. Build abgebrochen." | tee -a "$logfile"
return 1
fi
echo "DEBUG: platforms=$platforms" | tee -a "$logfile"
# ---- Tags für Registry vorbereiten ----
IFS=',' read -ra reg_array <<< "$registry"
tags=()
for reg in "${reg_array[@]}"; do
reg=$(echo "$reg" | xargs) # trim
[[ -z "$reg" ]] && continue
# Login falls Registry-Config existiert
local reg_config="$REGISTRY_CONFIG_DIR/$reg/config-file"
if [[ -f "$reg_config" ]]; then
local reg_user reg_pass
reg_user=$(grep "^username=" "$reg_config" | cut -d= -f2)
reg_pass=$(grep "^password=" "$reg_config" | cut -d= -f2)
if [[ -n "$reg_user" && -n "$reg_pass" ]]; then
echo "$reg_pass" | docker login "$reg" -u "$reg_user" --password-stdin 2>>"$logfile" || {
echo "WARNUNG: Login bei $reg fehlgeschlagen!" | tee -a "$logfile"
}
fi
fi
tags+=("-t" "$reg/$image_name:$version")
[[ "$latest" == "yes" ]] && tags+=("-t" "$reg/$image_name:latest")
done done
if [[ ${#tags[@]} -eq 0 ]]; then local archs
echo "Keine Registry-Tags definiert. Build abgebrochen." | tee -a "$logfile" archs=$(echo "$architectures" | sed 's/ /,/g')
return 1
fi
# ---- Docker Build-Befehl ---- local push_flag=""
local cmd [[ "$push" == "yes" ]] && push_flag="--push"
if [[ "$push" == "yes" ]]; then
cmd=(docker buildx build --platform "$platforms" "${tags[@]}" "$PROJECTS_DIR/$project" --push)
else
cmd=(docker buildx build --platform "$platforms" "${tags[@]}" "$PROJECTS_DIR/$project" --load)
fi
echo "Build-Befehl: ${cmd[*]}" | tee -a "$logfile" local logfile="$LOGS_DIR/${project}_$(date +"%Y%m%d_%H%M%S").log"
# ---- Build ausführen ---- echo "==== Build gestartet: $(date) ====" > "$logfile"
if "${cmd[@]}" >>"$logfile" 2>&1; then echo "Projekt: $project" >> "$logfile"
echo "==== Build beendet: $(date) ====" | tee -a "$logfile" echo "Registries: ${registry}" >> "$logfile"
echo "Image: $image_name" >> "$logfile"
echo "Architekturen: $architectures" >> "$logfile"
echo "Push: $push" >> "$logfile"
echo "Version: $version" >> "$logfile"
echo "Latest: $latest" >> "$logfile"
echo "====================================" >> "$logfile"
# Auto-Subversion erhöhen # Build starten
if [[ "$auto_subversion" == "yes" ]]; then local build_cmd
local major minor new_version build_cmd="docker buildx build --platform linux/$archs ${tags[*]} ./projects/$project $push_flag"
major=$(echo "$version" | cut -d. -f1) echo "$build_cmd" >> "$logfile"
minor=$(echo "$version" | cut -d. -f2)
minor=$((minor + 1)) if $build_cmd >> "$logfile" 2>&1; then
new_version="${major}.${minor}" echo "==== Build beendet: $(date) ====" >> "$logfile"
sed -i "s/^version=.*/version=$new_version/" "$config_file"
echo "Subversion automatisch auf $new_version erhöht." | tee -a "$logfile" # Latest-Tag setzen
if [[ "$latest" == "yes" ]]; then
for r in "${regs[@]}"; do
[[ -n "$r" ]] && docker tag "$r/$image_name:$version" "$r/$image_name:latest" >> "$logfile" 2>&1
done
fi
# Subversion erhöhen
if grep -q "^auto_subversion=yes" "$config_file"; then
local main_ver sub_ver
main_ver=$(echo "$version" | cut -d. -f1)
sub_ver=$(echo "$version" | cut -d. -f2)
sub_ver=$((sub_ver+1))
version="$main_ver.$sub_ver"
sed -i "s|^version=.*|version=$version|" "$config_file"
echo "Subversion automatisch auf $version erhöht." >> "$logfile"
fi fi
else else
echo "==== Build fehlgeschlagen: $(date) ====" | tee -a "$logfile" echo "==== Build fehlgeschlagen: $(date) ====" >> "$logfile"
whiptail --msgbox "Build für Projekt $project fehlgeschlagen. Details im Log: $logfile" 10 70
return 1
fi fi
whiptail --msgbox "Build beendet. Log-Datei: $logfile" 15 70
} }
# Logs ansehen (optional gefiltert nach Projekt) # Logs ansehen (optional gefiltert nach Projekt)
view_logs() { view_logs() {
#ensure_logs_dir #ensure_logs_dir
@@ -896,4 +794,4 @@ main_menu() {
# ------------------------- # -------------------------
ensure_dirs ensure_dirs
ensure_prereqs ensure_prereqs
main_menu main_menu