77 branches : [ main ]
88
99env :
10- GRADLE_OPTS : " -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=8 -Dkotlin.incremental=false -Dorg.gradle.configuration-cache=false "
11- # JVM 性能优化配置
12- JVM_OPTS : " -Xmx6g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -Xshare:off "
10+ GRADLE_OPTS : " -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=6 -Dkotlin.incremental=false -Dorg.gradle.configuration-cache=true "
11+ # JVM 性能优化配置 - 适应 GitHub Actions 7GB 内存限制
12+ JVM_OPTS : " -Xmx4g -XX:MaxMetaspaceSize=1536m -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:+UseStringDeduplication "
1313
1414jobs :
1515 # 🔍 快速检查 - 编译和基础验证
@@ -185,18 +185,32 @@ jobs:
185185
186186 - name : Run tests for ${{ matrix.group }} modules
187187 run : |
188+ echo "🚀 开始执行 ${{ matrix.group }} 模块组测试..."
189+ echo "📚 模块列表: ${{ matrix.modules }}"
190+ echo "🐳 容器配置: ${{ matrix.containers }}"
191+
192+ # 设置错误处理
193+ set -e
194+ trap 'echo "❌ 测试执行失败,正在收集错误信息..." >> $GITHUB_STEP_SUMMARY' ERR
195+
188196 ./gradlew ${{ matrix.modules }} test \
189197 --no-daemon \
190198 --parallel \
191- --no-build-cache \
192- --continue
199+ --build-cache \
200+ --continue \
201+ --stacktrace \
202+ --info
193203 env :
194204 # TestContainers 优化配置
195205 TESTCONTAINERS_RYUK_DISABLED : false
196206 TESTCONTAINERS_CHECKS_DISABLE : false
197207 TESTCONTAINERS_REUSE_ENABLE : true
198208 TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX : " "
199209 TESTCONTAINERS_REUSE_HASH_LABELS : true
210+ # TestContainers 超时和启动配置
211+ TESTCONTAINERS_PULL_PAUSE_TIMEOUT : 30
212+ TESTCONTAINERS_STARTUP_TIMEOUT : 120
213+ TESTCONTAINERS_CONNECT_TIMEOUT : 60
200214 # Docker 性能优化
201215 DOCKER_HOST : unix:///var/run/docker.sock
202216 TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE : /var/run/docker.sock
@@ -209,25 +223,69 @@ jobs:
209223 CI : true
210224 GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED : false
211225
212- - name : Upload test results
226+ - name : Collect test diagnostics
227+ if : failure()
228+ run : |
229+ echo "🔍 收集测试诊断信息..."
230+
231+ # 收集 Gradle 构建日志
232+ find . -name "*.log" -type f -exec echo "=== {} ===" \; -exec cat {} \; || true
233+
234+ # 收集容器日志
235+ if [[ "${{ matrix.containers }}" != "none" ]]; then
236+ echo "🐳 收集容器日志..."
237+ docker ps -a || true
238+ docker logs $(docker ps -aq --filter "label=org.testcontainers=true") || true
239+ fi
240+
241+ # JVM 堆转储和线程信息
242+ if pgrep -f "org.gradle.launcher.daemon.bootstrap.GradleDaemon" > /dev/null; then
243+ echo "👍 收集 JVM 诊断信息..."
244+ jps -v || true
245+ fi
246+
247+ # 系统资源使用
248+ echo "📈 系统资源使用:"
249+ free -h || true
250+ df -h || true
251+
252+ - name : Upload test results and diagnostics
213253 uses : actions/upload-artifact@v4
214254 if : always()
215255 with :
216256 name : test-results-${{ matrix.group }}
217257 path : |
218258 **/build/reports/tests/
219259 **/build/test-results/
220- retention-days : 3
260+ **/build/tmp/test/
261+ **/*.log
262+ retention-days : 5
221263
222264 - name : Cleanup containers
223265 if : always() && matrix.containers != 'none'
224266 run : |
225- # 清理测试容器,但保留可重用容器
226- docker container prune -f --filter "until=30m" --filter "label!=org.testcontainers.reuse.enable=true"
227- # 清理悬空镜像
228- docker image prune -f --filter "dangling=true"
229- # 清理测试卷
230- docker volume prune -f --filter "label!=keep"
267+ echo "🧼 开始清理 Docker 资源..."
268+
269+ # 显示当前资源使用情况
270+ echo "📈 当前 Docker 资源使用情况:"
271+ docker system df || true
272+
273+ # 智能清理:保留有用的重用容器
274+ echo "🗑️ 清理非重用容器..."
275+ docker container prune -f --filter "until=1h" --filter "label!=org.testcontainers.reuse.enable=true" || true
276+
277+ # 清理悬空镜像和无用网络
278+ echo "🖼️ 清理悬空镜像和网络..."
279+ docker image prune -f --filter "dangling=true" || true
280+ docker network prune -f --filter "until=1h" || true
281+
282+ # 清理老旧卷(保留近期的)
283+ echo "💾 清理老旧卷..."
284+ docker volume prune -f --filter "label!=keep" --filter "label!=org.testcontainers.reuse.enable=true" || true
285+
286+ # 显示清理后的资源情况
287+ echo "✨ 清理后 Docker 资源使用情况:"
288+ docker system df || true
231289
232290 # 📊 测试结果汇总
233291 test-results :
@@ -243,20 +301,60 @@ jobs:
243301 path : test-results
244302 pattern : test-results-*
245303
246- - name : Generate test summary
304+ - name : Generate comprehensive test summary
247305 run : |
248- echo "# 🧪 Test Results Summary" >> $GITHUB_STEP_SUMMARY
306+ echo "# 🧪 测试结果详细报告" >> $GITHUB_STEP_SUMMARY
307+ echo "" >> $GITHUB_STEP_SUMMARY
308+ echo "**执行时间:** $(date -u '+%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_STEP_SUMMARY
309+ echo "**测试环境:** GitHub Actions (ubuntu-latest)" >> $GITHUB_STEP_SUMMARY
310+ echo "" >> $GITHUB_STEP_SUMMARY
311+
312+ echo "## 📈 模块组测试状态" >> $GITHUB_STEP_SUMMARY
249313 echo "" >> $GITHUB_STEP_SUMMARY
250- echo "| Module Group | Status |" >> $GITHUB_STEP_SUMMARY
251- echo "|-------------|--------|" >> $GITHUB_STEP_SUMMARY
314+ echo "| 模块组 | 状态 | 容器依赖 | 耗时 |" >> $GITHUB_STEP_SUMMARY
315+ echo "|---------|--------|----------|------|" >> $GITHUB_STEP_SUMMARY
316+
317+ # 模块组信息
318+ declare -A group_containers=(
319+ ["core"]="无"
320+ ["rds"]="Database (PostgreSQL, MySQL, Redis)"
321+ ["business"]="Cache (Redis, MinIO)"
322+ ["security"]="无"
323+ ["data"]="无"
324+ )
252325
253326 for group in core rds business security data; do
327+ containers="${group_containers[$group]}"
254328 if [[ "${{ needs.test-matrix.result }}" == "success" ]]; then
255- echo "| $group | ✅ Passed |" >> $GITHUB_STEP_SUMMARY
329+ echo "| $group | ✅ 通过 | $containers | - |" >> $GITHUB_STEP_SUMMARY
256330 else
257- echo "| $group | ❌ Failed |" >> $GITHUB_STEP_SUMMARY
331+ echo "| $group | ❌ 失败 | $containers | - |" >> $GITHUB_STEP_SUMMARY
258332 fi
259333 done
334+
335+ echo "" >> $GITHUB_STEP_SUMMARY
336+
337+ # 添加失败分析
338+ if [[ "${{ needs.test-matrix.result }}" != "success" ]]; then
339+ echo "## ❌ 失败分析和建议" >> $GITHUB_STEP_SUMMARY
340+ echo "" >> $GITHUB_STEP_SUMMARY
341+ echo "🔍 **常见问题排查:**" >> $GITHUB_STEP_SUMMARY
342+ echo "" >> $GITHUB_STEP_SUMMARY
343+ echo "1. **TestContainers 启动失败**" >> $GITHUB_STEP_SUMMARY
344+ echo " - 检查 Docker 服务是否正常" >> $GITHUB_STEP_SUMMARY
345+ echo " - 检查网络连接和镜像拉取" >> $GITHUB_STEP_SUMMARY
346+ echo " - 超时配置可能需要调整" >> $GITHUB_STEP_SUMMARY
347+ echo "" >> $GITHUB_STEP_SUMMARY
348+ echo "2. **内存不足 (OOM)**" >> $GITHUB_STEP_SUMMARY
349+ echo " - JVM 堆内存设置:4GB" >> $GITHUB_STEP_SUMMARY
350+ echo " - Metaspace 设置:1.5GB" >> $GITHUB_STEP_SUMMARY
351+ echo " - 并行 worker 限制:6个" >> $GITHUB_STEP_SUMMARY
352+ echo "" >> $GITHUB_STEP_SUMMARY
353+ echo "3. **测试依赖冲突**" >> $GITHUB_STEP_SUMMARY
354+ echo " - 检查并行测试中的端口冲突" >> $GITHUB_STEP_SUMMARY
355+ echo " - 验证数据库连接池配置" >> $GITHUB_STEP_SUMMARY
356+ echo "" >> $GITHUB_STEP_SUMMARY
357+ fi
260358
261359 - name : Check overall status
262360 run : |
0 commit comments