diff --git a/scripts/ci/run_staging_tests.sh b/scripts/ci/run_staging_tests.sh index dda2144ae..7b8d06ffd 100755 --- a/scripts/ci/run_staging_tests.sh +++ b/scripts/ci/run_staging_tests.sh @@ -16,6 +16,17 @@ CONTAINER_NAME="staging-${MODE}-$$" # 强制清理可能残留的同名容器 docker rm -f "$CONTAINER_NAME" 2>/dev/null || true +# 任何退出路径(成功/失败/被取消 SIGTERM)都回收容器,杜绝 staging 测试容器泄漏 +cleanup_container() { + local code=$? + set +e + docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 && echo "✅ 已清理容器: $CONTAINER_NAME" + exit "$code" +} +trap cleanup_container EXIT +trap 'exit 130' INT +trap 'exit 143' TERM + if [ "$MODE" = "e2e" ]; then docker create --name "$CONTAINER_NAME" --ipc=host \ -e E2E_BASE_URL=https://staging.xiaoxiajianji.com \ @@ -44,7 +55,5 @@ docker cp apps "$CONTAINER_NAME:/workspace/" docker start -a "$CONTAINER_NAME" EXIT_CODE=$(docker wait "$CONTAINER_NAME") -# 清理容器 -docker rm "$CONTAINER_NAME" 2>/dev/null || true - +# 容器由 EXIT trap 的 cleanup_container 统一回收(失败/取消也保证清理) exit "$EXIT_CODE"