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 {
|
environment {
|
||||||
// Gitea 仓库配置
|
// 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 配置
|
// Docker Registry 配置
|
||||||
REGISTRY = 'localhost:5000'
|
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') {
|
stage('Docker Build & Push') {
|
||||||
when {
|
when {
|
||||||
expression { env.SERVICES_TO_BUILD != '' }
|
expression { env.SERVICES_TO_BUILD != '' }
|
||||||
@@ -161,57 +123,49 @@ pipeline {
|
|||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
echo "=== Docker 镜像构建与推送 ==="
|
echo "=== Docker 镜像构建与推送 ==="
|
||||||
|
echo "使用 Docker 多阶段构建(包含 Maven 编译)"
|
||||||
|
|
||||||
def services = env.SERVICES_TO_BUILD.split(',')
|
def services = env.SERVICES_TO_BUILD.split(',')
|
||||||
def parallelBuilds = [:]
|
|
||||||
|
|
||||||
|
// 串行构建,避免内存溢出
|
||||||
services.each { service ->
|
services.each { service ->
|
||||||
parallelBuilds["Docker ${service}"] = {
|
def modulePath = getModulePath(service)
|
||||||
stage("Docker ${service}") {
|
def jarName = service
|
||||||
def modulePath = getModulePath(service)
|
|
||||||
def jarName = service
|
echo "========================================="
|
||||||
|
echo "构建服务: ${service}"
|
||||||
echo "Building Docker image for ${service}..."
|
echo "模块路径: ${modulePath}"
|
||||||
|
echo "========================================="
|
||||||
sh """
|
|
||||||
docker build \
|
try {
|
||||||
-f docker/Dockerfile.template \
|
// Docker 多阶段构建(包含 Maven 编译和镜像打包)
|
||||||
--build-arg MODULE_NAME=${modulePath} \
|
sh """
|
||||||
--build-arg JAR_NAME=${jarName} \
|
docker build \
|
||||||
--build-arg SKIP_TESTS=true \
|
-f docker/Dockerfile.template \
|
||||||
-t ${REGISTRY}/${service}:${IMAGE_TAG} \
|
--build-arg MODULE_NAME=${modulePath} \
|
||||||
-t ${REGISTRY}/${service}:latest \
|
--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 "推送镜像: ${service}"
|
||||||
"""
|
sh """
|
||||||
|
docker push ${REGISTRY}/${service}:${IMAGE_TAG}
|
||||||
echo "Cleaning up old images for ${service}..."
|
docker push ${REGISTRY}/${service}:latest
|
||||||
sh """
|
"""
|
||||||
docker images ${REGISTRY}/${service} --format '{{.ID}} {{.Tag}}' | \
|
|
||||||
grep -v '${IMAGE_TAG}' | grep -v 'latest' | \
|
echo "✓ ${service} 构建成功"
|
||||||
awk '{print \$1}' | head -n -2 | xargs -r docker rmi -f || true
|
} catch (Exception e) {
|
||||||
"""
|
echo "✗ ${service} 构建失败: ${e.message}"
|
||||||
}
|
throw e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 并行构建镜像(最多 3 个并行)
|
// 清理悬空镜像
|
||||||
def batchSize = 3
|
echo "清理悬空镜像..."
|
||||||
for (int i = 0; i < services.size(); i += batchSize) {
|
sh "docker image prune -f || true"
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user