fix: 改用 Docker 多阶段构建,移除对 Jenkins Maven 的依赖
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

- 移除独立的 Maven Build 阶段
- 直接使用 Docker 多阶段构建(Dockerfile 中包含 Maven)
- 改为串行构建避免内存溢出
- 添加更详细的构建日志
This commit is contained in:
lzh
2026-01-13 10:00:54 +08:00
parent 5e2f92f177
commit 7d5cf21bdc

120
Jenkinsfile vendored
View File

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