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" } } }