Quellcode durchsuchen

流水线优化

dujian vor 1 Woche
Ursprung
Commit
2f17282acd

+ 8 - 1
docs/jenkins/Jenkinsfile-uat-build-deploy.groovy

@@ -267,18 +267,22 @@ pipeline {
                         sh """
                             set -e
                             echo "\${HARBOR_PASS}" | docker login ${reg} -u "\${HARBOR_USER}" --password-stdin
+                            echo ">>> docker disk before Harbor push:"
+                            df -h /var/lib/docker 2>/dev/null || df -h / || true
+                            docker system prune -f --filter until=48h 2>/dev/null || true
                         """
                         harborServices.each { svc ->
                             def jarName = "${svc.module}-1.0.0.jar"
                             def imageLatest = "${reg}/${proj}/${svc.repo}:${latestTag}"
                             def imageBuild = "${reg}/${proj}/${svc.repo}:${buildTag}"
+                            def withLibFlag = svc.withLib ? 'true' : 'false'
                             sh """
                                 set -e
                                 test -f ${WORKSPACE}/${svc.module}/target/${jarName}
                                 cd ${WORKSPACE}/${svc.module}
                                 rm -rf .jenkins_docker_ctx && mkdir -p .jenkins_docker_ctx/lib
                                 cp -f target/${jarName} .jenkins_docker_ctx/${jarName}
-                                if [ -d target/lib ]; then
+                                if [ "${withLibFlag}" = "true" ] && [ -d target/lib ]; then
                                   cp -rf target/lib/. .jenkins_docker_ctx/lib/
                                 else
                                   touch .jenkins_docker_ctx/lib/.keep
@@ -297,6 +301,9 @@ pipeline {
                                   -t ${imageLatest} .
                                 docker push ${imageLatest}
                                 echo ">>> pushed ${imageLatest} (archived prior latest as ${buildTag} if any)"
+                                docker rmi ${imageLatest} 2>/dev/null || true
+                                cd ${WORKSPACE}/${svc.module}
+                                rm -rf .jenkins_docker_ctx
                             """
                         }
                         if (params.HARBOR_PRUNE_OLD_TAGS == true) {

+ 16 - 0
docs/jenkins/README-UAT-HARBOR-PUSH.md

@@ -193,6 +193,22 @@ curl -s -u 'robot$alien_cloud+jenkins-k8s:<TOKEN>' \
 | Harbor 仍无 gateway | 是否勾选了 `PUSH_TO_HARBOR`;Maven 是否打出 `alien-gateway/target/*.jar` |
 | 生产 Whole `uat-latest: not found` | 先跑一轮 UAT 推 Harbor;`SOURCE_TAG` 填 **`uat-latest`** |
 | 需要回滚到上一版 UAT | 在 Harbor 查 `uat-build-<N>`,生产 Job 填该 tag 作 `SOURCE_TAG` |
+| `no space left on device`(docker build) | Jenkins 节点磁盘满;见下文 **磁盘不足** |
+
+### 磁盘不足(`no space left on device`)
+
+Harbor 阶段会在本机 **docker build**,store/lawyer 等带 `lib/` 时单次上下文可达数百 MB,七个服务连续构建易占满 `/var/lib/docker`。
+
+**在 Jenkins 节点(日志里多为 `/var/jenkins_home` 所在盘)执行:**
+
+```bash
+df -h
+docker system df
+docker system prune -af          # 清理未使用镜像/构建缓存(会删未引用镜像,慎用前先确认)
+docker builder prune -af       # 仅清构建缓存(相对安全)
+```
+
+脚本已做优化:`withLib=false` 的服务(如 **gateway**)构建上下文**不再拷贝** `target/lib`,仅保留空 `lib/.keep`;每个服务 push 后删除本地镜像并清理 `.jenkins_docker_ctx`。仍建议在节点定期 `docker system prune`。
 
 ---
 

+ 1 - 0
docs/jenkins/produ/docker/Dockerfile.java-service

@@ -11,6 +11,7 @@ ARG WITH_LIB=false
 WORKDIR /app
 
 COPY ${JAR_FILE} /app/app.jar
+RUN mkdir -p /app/lib
 COPY lib /app/lib
 
 ENV SERVER_PORT=${SERVER_PORT}