From 0b1c3d54cf9ac01d07162bbdc19ad229f4ba26ec Mon Sep 17 00:00:00 2001 From: pi-farm Date: Sat, 27 Sep 2025 21:19:07 +0200 Subject: [PATCH] edit function build_image --- scripts/image-builder.sh | 102 +++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 41 deletions(-) diff --git a/scripts/image-builder.sh b/scripts/image-builder.sh index dfb569b..41e03c0 100755 --- a/scripts/image-builder.sh +++ b/scripts/image-builder.sh @@ -615,62 +615,82 @@ build_image() { local config_file="$PROJECT_CONFIG_DIR/$project/config-file" load_project_config "$config_file" - #ensure_logs_dir + # Logs-Verzeichnis + mkdir -p "$LOGS_DIR" local timestamp timestamp=$(date +"%Y%m%d_%H%M%S") local logfile="$LOGS_DIR/${project}_${timestamp}.log" - { - echo "==== Build gestartet: $(date) ====" - echo "Projekt: $project" - echo "Registry: $registry" - echo "Image: $image_name" - echo "Architekturen: $architectures" - echo "Push: $push" - echo "Version: $version" - echo "Latest-Tag: $latest" - echo "====================================" - } | tee "$logfile" + echo "==== Build gestartet: $(date) ====" | tee -a "$logfile" + echo "Projekt: $project" | tee -a "$logfile" + echo "Registries: $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" - # Architekturen in Buildx-Format umwandeln (linux/arch, getrennt durch Komma) + # Plattformen für Buildx local platforms - platforms=$(echo "$architectures" | xargs -n1 | sed 's|^|linux/|' | paste -sd, -) + IFS=' ' read -ra archs <<< "$architectures" + platforms=$(printf "linux/%s," "${archs[@]}") + platforms="${platforms%,}" # letztes Komma entfernen - # Tags aufbauen + # Tags vorbereiten local tags=() IFS=',' read -ra regs <<< "$registry" for reg in "${regs[@]}"; do - tags+=("-t" "${reg}/${image_name}:${version}") - if [[ "$latest" == "yes" ]]; then - tags+=("-t" "${reg}/${image_name}:latest") - fi + local url + url=$(jq -r '.url' "$CONFIG_DIR/registries/$reg/config-file") + tags+=("-t" "${url}/${image_name}:${version}") + [[ "$latest" == "yes" ]] && tags+=("-t" "${url}/${image_name}:latest") done - # Push-Flag - local push_flag="" - [[ "$push" == "yes" ]] && push_flag="--push" - - { - docker buildx build \ - --platform "$platforms" \ - "${tags[@]}" \ - "$PROJECTS_DIR/$project" \ - $push_flag - } 2>&1 | tee -a "$logfile" - - echo "==== Build beendet: $(date) ====" | tee -a "$logfile" - - # Auto-Subversion - if [[ "$auto_subversion" == "yes" ]]; then - local major minor - major=$(echo "$version" | cut -d. -f1) - minor=$(echo "$version" | cut -d. -f2) - minor=$((minor + 1)) - sed -i "s/^version=.*/version=${major}.${minor}/" "$config_file" - echo "Subversion automatisch auf ${major}.${minor} erhöht." | tee -a "$logfile" + # Login zu allen Registries falls push=yes + if [[ "$push" == "yes" ]]; then + for reg in "${regs[@]}"; do + local url username password + url=$(jq -r '.url' "$CONFIG_DIR/registries/$reg/config-file") + username=$(jq -r '.username // ""' "$CONFIG_DIR/registries/$reg/config-file") + password=$(jq -r '.password // ""' "$CONFIG_DIR/registries/$reg/config-file") + if [[ -n "$username" && -n "$password" ]]; then + docker login "$url" -u "$username" -p "$password" &>> "$logfile" + fi + done fi + + # Build-Befehl + local build_cmd + build_cmd="docker buildx build --platform $platforms ${tags[*]} ./projects/$project" + if [[ "$push" == "yes" ]]; then + build_cmd+=" --push" + else + # nur erste Plattform lokal laden + build_cmd+=" --load --platform linux/${archs[0]}" + fi + + # Build ausführen + if $build_cmd 2>&1 | tee -a "$logfile"; then + echo "==== Build beendet: $(date) ====" | tee -a "$logfile" + # Subversion erhöhen, falls auto_subversion=yes + if [[ "$auto_subversion" == "yes" ]]; then + local major minor + major=${version%%.*} + minor=${version##*.} + minor=$((minor + 1)) + new_version="$major.$minor" + sed -i "s|^version=.*|version=$new_version|" "$config_file" + echo "Subversion automatisch auf $new_version erhöht." | tee -a "$logfile" + fi + else + echo "==== Build fehlgeschlagen: $(date) ====" | tee -a "$logfile" + fi + + whiptail --msgbox "Build abgeschlossen. Log-Datei: $logfile" 10 60 } + # Logs ansehen (optional gefiltert nach Projekt) view_logs() { #ensure_logs_dir