fix(ci): trap EXIT 回收集成测试 PG/Redis 容器,杜绝取消/失败泄漏 #1946
Reference in New Issue
Block a user
Delete Branch "fix/ci-service-container-cleanup-trap"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
9/15 CI 大面积排队,根因是集成测试的临时服务容器(ci-pg-/ci-redis-)在 job 失败或被取消时不回收,堆积 20 个僵尸容器把构建机 load 顶到 25.9。
根因
scripts/ci/run_integration_tests.sh用docker run -d起 PG/Redis,只在脚本正常走到结尾时docker rm -f;set -e中途失败或 Gitea 取消(SIGTERM)时清理不执行 → 泄漏。改动
cleanup_containers(),注册trap EXIT / INT / TERM,在启动任何服务容器前生效validate_migration.sh已有的trap cleanup_db EXIT做法配套(主机侧,已上线)
/opt/scripts/ci_service_reaper.py每 5 分钟按 Gitea run 状态兜底回收泄漏容器(run 完成即清,在跑的保留),作为第二层防御。风险
仅改测试脚本清理逻辑,不碰业务代码。bash -n 通过。
🚀 预览环境已部署
ci green, auto-merge via admin (rerun skipped pr-automation)
🗑️ 预览环境已清理
PR #1946 已关闭或合并,对应的预览环境已被清理。