Skip to content

Commit d0c53e2

Browse files
committed
🛠️ [chore] Optimize CI/CD workflows for Maven publish and test automation
- Tweaked Gradle and JVM options to improve performance, reducing memory usage and aligning with GitHub Actions' resource constraints. - Refined caching strategies by adjusting cache keys, improving restoration logic, and removing redundant configurations. - Enhanced Maven Central publishing with simplified decision logic, error handling, and pre-validation checks for secrets and network connectivity. - Improved test diagnostics collection, added test environment configurations, and modularized test container settings for better reliability. - Updated test summary reporting with detailed statuses, failure analysis, and optimization suggestions. - Introduced smarter Docker resource management, including targeted container, image, and volume cleanup.
1 parent d64134e commit d0c53e2

2 files changed

Lines changed: 210 additions & 77 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 117 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ on:
77
branches: [ main ]
88

99
env:
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

1414
jobs:
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

Comments
 (0)