edit function build_image

This commit is contained in:
2025-09-27 21:19:07 +02:00
parent 1b4d9fedd5
commit 0b1c3d54cf

View File

@@ -615,62 +615,82 @@ build_image() {
local config_file="$PROJECT_CONFIG_DIR/$project/config-file" local config_file="$PROJECT_CONFIG_DIR/$project/config-file"
load_project_config "$config_file" load_project_config "$config_file"
#ensure_logs_dir # Logs-Verzeichnis
mkdir -p "$LOGS_DIR"
local timestamp local timestamp
timestamp=$(date +"%Y%m%d_%H%M%S") timestamp=$(date +"%Y%m%d_%H%M%S")
local logfile="$LOGS_DIR/${project}_${timestamp}.log" local logfile="$LOGS_DIR/${project}_${timestamp}.log"
{ echo "==== Build gestartet: $(date) ====" | tee -a "$logfile"
echo "==== Build gestartet: $(date) ====" echo "Projekt: $project" | tee -a "$logfile"
echo "Projekt: $project" echo "Registries: $registry" | tee -a "$logfile"
echo "Registry: $registry" echo "Image: $image_name" | tee -a "$logfile"
echo "Image: $image_name" echo "Architekturen: $architectures" | tee -a "$logfile"
echo "Architekturen: $architectures" echo "Push: $push" | tee -a "$logfile"
echo "Push: $push" echo "Version: $version" | tee -a "$logfile"
echo "Version: $version" echo "Latest: $latest" | tee -a "$logfile"
echo "Latest-Tag: $latest" echo "====================================" | tee -a "$logfile"
echo "===================================="
} | tee "$logfile"
# Architekturen in Buildx-Format umwandeln (linux/arch, getrennt durch Komma) # Plattformen für Buildx
local platforms 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=() local tags=()
IFS=',' read -ra regs <<< "$registry" IFS=',' read -ra regs <<< "$registry"
for reg in "${regs[@]}"; do for reg in "${regs[@]}"; do
tags+=("-t" "${reg}/${image_name}:${version}") local url
if [[ "$latest" == "yes" ]]; then url=$(jq -r '.url' "$CONFIG_DIR/registries/$reg/config-file")
tags+=("-t" "${reg}/${image_name}:latest") tags+=("-t" "${url}/${image_name}:${version}")
fi [[ "$latest" == "yes" ]] && tags+=("-t" "${url}/${image_name}:latest")
done done
# Push-Flag # Login zu allen Registries falls push=yes
local push_flag="" if [[ "$push" == "yes" ]]; then
[[ "$push" == "yes" ]] && push_flag="--push" for reg in "${regs[@]}"; do
local url username password
{ url=$(jq -r '.url' "$CONFIG_DIR/registries/$reg/config-file")
docker buildx build \ username=$(jq -r '.username // ""' "$CONFIG_DIR/registries/$reg/config-file")
--platform "$platforms" \ password=$(jq -r '.password // ""' "$CONFIG_DIR/registries/$reg/config-file")
"${tags[@]}" \ if [[ -n "$username" && -n "$password" ]]; then
"$PROJECTS_DIR/$project" \ docker login "$url" -u "$username" -p "$password" &>> "$logfile"
$push_flag fi
} 2>&1 | tee -a "$logfile" done
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"
fi 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) # Logs ansehen (optional gefiltert nach Projekt)
view_logs() { view_logs() {
#ensure_logs_dir #ensure_logs_dir