From 12817a7e82e8d91807cd40e790d937f57093c960 Mon Sep 17 00:00:00 2001 From: husbando_enjoyer Date: Wed, 24 Dec 2025 13:37:00 +0100 Subject: [PATCH] Rotate images --- Jenkinsfile.cd | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile.cd b/Jenkinsfile.cd index 7f39b85..1f87dc1 100644 --- a/Jenkinsfile.cd +++ b/Jenkinsfile.cd @@ -88,20 +88,55 @@ pipeline { sh ''' set -e + OLD_BACKEND_LATEST_ID=$(docker images -q cafeteria-backend:latest || true) + OLD_BACKEND_PREVIOUS_ID=$(docker images -q cafeteria-backend:previous || true) + OLD_FRONTEND_LATEST_ID=$(docker images -q cafeteria-frontend:latest || true) + OLD_FRONTEND_PREVIOUS_ID=$(docker images -q cafeteria-frontend:previous || true) + docker build \ --build-arg APP_VERSION=${APP_VERSION} \ --build-arg GIT_COMMIT=${COMMIT_SHORT} \ --build-arg COMMIT_AUTHOR="${COMMIT_AUTHOR}" \ --build-arg BUILD_NUMBER=${BUILD_NUMBER} \ - -t cafeteria-backend:${BUILD_NUMBER} \ -t cafeteria-backend:latest \ ./backend docker build \ --build-arg VITE_API_BASE=${VITE_API_BASE} \ - -t cafeteria-frontend:${BUILD_NUMBER} \ -t cafeteria-frontend:latest \ ./frontend + + NEW_BACKEND_LATEST_ID=$(docker images -q cafeteria-backend:latest || true) + NEW_FRONTEND_LATEST_ID=$(docker images -q cafeteria-frontend:latest || true) + + if [ -n "$OLD_BACKEND_LATEST_ID" ]; then + docker tag "$OLD_BACKEND_LATEST_ID" cafeteria-backend:previous + fi + if [ -n "$OLD_FRONTEND_LATEST_ID" ]; then + docker tag "$OLD_FRONTEND_LATEST_ID" cafeteria-frontend:previous + fi + + if [ -n "$OLD_BACKEND_PREVIOUS_ID" ] && \ + [ "$OLD_BACKEND_PREVIOUS_ID" != "$OLD_BACKEND_LATEST_ID" ] && \ + [ "$OLD_BACKEND_PREVIOUS_ID" != "$NEW_BACKEND_LATEST_ID" ]; then + docker rmi "$OLD_BACKEND_PREVIOUS_ID" || true + fi + + if [ -n "$OLD_FRONTEND_PREVIOUS_ID" ] && \ + [ "$OLD_FRONTEND_PREVIOUS_ID" != "$OLD_FRONTEND_LATEST_ID" ] && \ + [ "$OLD_FRONTEND_PREVIOUS_ID" != "$NEW_FRONTEND_LATEST_ID" ]; then + docker rmi "$OLD_FRONTEND_PREVIOUS_ID" || true + fi + + cleanup_tags() { + repo="$1" + docker images --format "{{.Repository}}:{{.Tag}}" \ + | awk -v repo="$repo" '$0 ~ "^"repo":" && $0 !~ /:latest$|:previous$/' \ + | xargs -r docker rmi || true + } + + cleanup_tags cafeteria-backend + cleanup_tags cafeteria-frontend ''' } } @@ -128,7 +163,7 @@ pipeline { echo "Deploying backend ${BUILD_NUMBER}" - BACKEND_TAG=${BUILD_NUMBER} FRONTEND_TAG=${BUILD_NUMBER} docker-compose up -d + BACKEND_TAG=latest FRONTEND_TAG=latest docker-compose up -d ''' } }