From 1298fdd1e83e6954fd54ee67f34c171c769cec76 Mon Sep 17 00:00:00 2001 From: dxin <1554389441@qq.com> Date: Sun, 9 Nov 2025 11:10:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=88=A0=E9=99=A4=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SCM/s1_go_lessie_api.groovy | 28 ++++++++++++++++++++++------ SCM/s1_python_lessie_agents.groovy | 28 ++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/SCM/s1_go_lessie_api.groovy b/SCM/s1_go_lessie_api.groovy index c366ff4..979579e 100644 --- a/SCM/s1_go_lessie_api.groovy +++ b/SCM/s1_go_lessie_api.groovy @@ -237,12 +237,13 @@ pipeline { post { always { script { - echo "开始清理本地旧镜像,仅保留最近 2 个构建版本" def keepCount = 2 + echo "开始清理本地旧镜像,仅保留最近 ${keepCount} 个构建版本" def imagePrefix = "${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}" // 获取所有镜像(按创建时间排序,越新的越前) - def allImagesRaw = sh(script: "docker images ${imagePrefix} --format '{{.ID}} {{.Repository}}:{{.Tag}}' | sort -rk1", returnStdout: true).trim() + // 格式:Repository:Tag ImageID CreatedAt + def allImagesRaw = sh(script: "docker images ${imagePrefix} --format '{{.Repository}}:{{.Tag}} {{.ID}} {{.CreatedAt}}' | sort -rk3", returnStdout: true).trim() if (!allImagesRaw) { echo "未找到任何镜像,无需清理" return @@ -256,13 +257,28 @@ pipeline { def oldImages = allImages.drop(keepCount) echo "发现 ${oldImages.size()} 个旧镜像需要清理" + oldImages.each { line -> + echo " ${line}" + } oldImages.each { line -> def parts = line.split(' ') - def imageId = parts[0] - def imageTag = parts[1] - echo "删除旧镜像: ${imageTag} (ID: ${imageId})" - sh "docker rmi -f \"${imageId}"\ || true" + def imageTag = parts[0] + def imageId = parts.size() > 1 ? parts[1] : "" + + // 对于标签为的无效镜像,使用镜像ID删除 + if (imageTag.contains("") && imageId) { + echo "删除无效镜像: ${imageId}" + sh(returnStatus: true, script: "docker rmi -f ${imageId} || true") + } else if (imageId) { + // 对于有标签的有效镜像,优先使用镜像ID删除 + echo "删除旧镜像: ${imageTag} (${imageId})" + sh(returnStatus: true, script: "docker rmi -f ${imageId} || true") + } else { + // 兜底方案,使用标签删除 + echo "删除旧镜像: ${imageTag}" + sh(returnStatus: true, script: "docker rmi -f ${imageTag} || true") + } } echo "清理完成,当前镜像状态:" diff --git a/SCM/s1_python_lessie_agents.groovy b/SCM/s1_python_lessie_agents.groovy index b8a114b..0393d77 100644 --- a/SCM/s1_python_lessie_agents.groovy +++ b/SCM/s1_python_lessie_agents.groovy @@ -217,12 +217,13 @@ pipeline { post { always { script { - echo "开始清理本地旧镜像,仅保留最近 2 个构建版本" def keepCount = 2 + echo "开始清理本地旧镜像,仅保留最近 ${keepCount} 个构建版本" def imagePrefix = "${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}" // 获取所有镜像(按创建时间排序,越新的越前) - def allImagesRaw = sh(script: "docker images ${imagePrefix} --format '{{.Repository}}:{{.Tag}} {{.CreatedAt}}' | sort -rk2", returnStdout: true).trim() + // 格式:Repository:Tag ImageID CreatedAt + def allImagesRaw = sh(script: "docker images ${imagePrefix} --format '{{.Repository}}:{{.Tag}} {{.ID}} {{.CreatedAt}}' | sort -rk3", returnStdout: true).trim() if (!allImagesRaw) { echo "未找到任何镜像,无需清理" return @@ -236,13 +237,28 @@ pipeline { def oldImages = allImages.drop(keepCount) echo "发现 ${oldImages.size()} 个旧镜像需要清理" + oldImages.each { line -> + echo " ${line}" + } oldImages.each { line -> def parts = line.split(' ') - def imageId = parts[0] - def imageTag = parts[1] - echo "删除旧镜像: ${imageTag} (ID: ${imageId})" - sh "docker rmi -f \"${imageId}"\ || true" + def imageTag = parts[0] + def imageId = parts.size() > 1 ? parts[1] : "" + + // 对于标签为的无效镜像,使用镜像ID删除 + if (imageTag.contains("") && imageId) { + echo "删除无效镜像: ${imageId}" + sh(returnStatus: true, script: "docker rmi -f ${imageId} || true") + } else if (imageId) { + // 对于有标签的有效镜像,优先使用镜像ID删除 + echo "删除旧镜像: ${imageTag} (${imageId})" + sh(returnStatus: true, script: "docker rmi -f ${imageId} || true") + } else { + // 兜底方案,使用标签删除 + echo "删除旧镜像: ${imageTag}" + sh(returnStatus: true, script: "docker rmi -f ${imageTag} || true") + } } echo "清理完成,当前镜像状态:"