fix: 改用 Docker 多阶段构建,移除对 Jenkins Maven 的依赖
- 移除独立的 Maven Build 阶段 - 直接使用 Docker 多阶段构建(Dockerfile 中包含 Maven) - 改为串行构建避免内存溢出 - 添加更详细的构建日志
This commit is contained in:
120
Jenkinsfile
vendored
120
Jenkinsfile
vendored
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user