From 7d5cf21bdcf9a157254a4f0a3167a17dcd357473 Mon Sep 17 00:00:00 2001 From: lzh Date: Tue, 13 Jan 2026 10:00:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=B9=E7=94=A8=20Docker=20=E5=A4=9A?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=E6=9E=84=E5=BB=BA=EF=BC=8C=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=AF=B9=20Jenkins=20Maven=20=E7=9A=84=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除独立的 Maven Build 阶段 - 直接使用 Docker 多阶段构建(Dockerfile 中包含 Maven) - 改为串行构建避免内存溢出 - 添加更详细的构建日志 --- Jenkinsfile | 120 ++++++++++++++++------------------------------------ 1 file changed, 37 insertions(+), 83 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 99400e6..9f02de8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,7 +17,7 @@ pipeline { environment { // Gitea 仓库配置 - GIT_REPO = 'http://124.221.55.225:3000/XW-AIOT/aiot-platform-cloud.git' + GIT_REPO = 'http://172.17.16.14:3000/XW-AIOT/aiot-platform-cloud.git' // Docker Registry 配置 REGISTRY = 'localhost:5000' @@ -116,44 +116,6 @@ pipeline { } } - stage('Maven Build') { - when { - expression { env.SERVICES_TO_BUILD != '' } - } - steps { - script { - echo "=== Maven 构建 ===" - - def services = env.SERVICES_TO_BUILD.split(',') - - // 并行构建(最多 3 个并行,避免内存溢出) - def parallelBuilds = [:] - def batchSize = 3 - - for (int i = 0; i < services.size(); i += batchSize) { - def batch = services[i..Math.min(i + batchSize - 1, services.size() - 1)] - - batch.each { service -> - def modulePath = getModulePath(service) - - parallelBuilds["Build ${service}"] = { - stage("Build ${service}") { - echo "Building ${service}..." - sh """ - mvn clean package -pl ${modulePath} -am -DskipTests -B - """ - } - } - } - - // 执行当前批次 - parallel parallelBuilds - parallelBuilds = [:] - } - } - } - } - stage('Docker Build & Push') { when { expression { env.SERVICES_TO_BUILD != '' } @@ -161,57 +123,49 @@ pipeline { steps { script { echo "=== Docker 镜像构建与推送 ===" + echo "使用 Docker 多阶段构建(包含 Maven 编译)" def services = env.SERVICES_TO_BUILD.split(',') - def parallelBuilds = [:] + // 串行构建,避免内存溢出 services.each { service -> - parallelBuilds["Docker ${service}"] = { - stage("Docker ${service}") { - def modulePath = getModulePath(service) - def jarName = service - - echo "Building Docker image for ${service}..." - - sh """ - docker build \ - -f docker/Dockerfile.template \ - --build-arg MODULE_NAME=${modulePath} \ - --build-arg JAR_NAME=${jarName} \ - --build-arg SKIP_TESTS=true \ - -t ${REGISTRY}/${service}:${IMAGE_TAG} \ - -t ${REGISTRY}/${service}:latest \ - . - """ - - echo "Pushing Docker image for ${service}..." - sh """ - docker push ${REGISTRY}/${service}:${IMAGE_TAG} - docker push ${REGISTRY}/${service}:latest - """ - - echo "Cleaning up old images for ${service}..." - sh """ - docker images ${REGISTRY}/${service} --format '{{.ID}} {{.Tag}}' | \ - grep -v '${IMAGE_TAG}' | grep -v 'latest' | \ - awk '{print \$1}' | head -n -2 | xargs -r docker rmi -f || true - """ - } + def modulePath = getModulePath(service) + def jarName = service + + echo "=========================================" + echo "构建服务: ${service}" + echo "模块路径: ${modulePath}" + echo "=========================================" + + try { + // Docker 多阶段构建(包含 Maven 编译和镜像打包) + sh """ + docker build \ + -f docker/Dockerfile.template \ + --build-arg MODULE_NAME=${modulePath} \ + --build-arg JAR_NAME=${jarName} \ + --build-arg SKIP_TESTS=true \ + -t ${REGISTRY}/${service}:${IMAGE_TAG} \ + -t ${REGISTRY}/${service}:latest \ + . + """ + + echo "推送镜像: ${service}" + sh """ + docker push ${REGISTRY}/${service}:${IMAGE_TAG} + docker push ${REGISTRY}/${service}:latest + """ + + echo "✓ ${service} 构建成功" + } catch (Exception e) { + echo "✗ ${service} 构建失败: ${e.message}" + throw e } } - // 并行构建镜像(最多 3 个并行) - def batchSize = 3 - for (int i = 0; i < services.size(); i += batchSize) { - def batch = services[i..Math.min(i + batchSize - 1, services.size() - 1)] - def batchBuilds = [:] - - batch.each { service -> - batchBuilds["Docker ${service}"] = parallelBuilds["Docker ${service}"] - } - - parallel batchBuilds - } + // 清理悬空镜像 + echo "清理悬空镜像..." + sh "docker image prune -f || true" } } }