diff --git a/scripts/ci/ensure_persistent_builder.sh b/scripts/ci/ensure_persistent_builder.sh index 928dcbadf..0f3c45bdc 100755 --- a/scripts/ci/ensure_persistent_builder.sh +++ b/scripts/ci/ensure_persistent_builder.sh @@ -11,10 +11,21 @@ BUILDER="ci-builder-persist" if ! docker buildx inspect "$BUILDER" >/dev/null 2>&1; then echo "=== 创建持久 buildx builder: $BUILDER ===" - docker buildx create --name "$BUILDER" --driver docker-container \ - --driver-opt network=host \ - --buildkitd-flags "--allow-insecure-entitlement network.host" \ - --platform linux/amd64 + # 并发安全:matrix 多个 job 可能同时检测到 builder 不存在,只有一个 create 成功; + # 其余 job 的 create 会因 "builder already exists" 失败(set -e 下会退出)。 + # 用 create || inspect 兜底:create 失败时若 builder 实际已被别的 job 创建,直接复用。 + if ! docker buildx create --name "$BUILDER" --driver docker-container \ + --driver-opt network=host \ + --buildkitd-flags "--allow-insecure-entitlement network.host" \ + --platform linux/amd64 2>/tmp/_buildx_create.err; then + if docker buildx inspect "$BUILDER" >/dev/null 2>&1; then + echo "=== builder 已被并发任务创建,复用: $BUILDER ===" + else + echo "❌ builder 创建失败且不存在:" + cat /tmp/_buildx_create.err + exit 1 + fi + fi else echo "=== 复用持久 buildx builder: $BUILDER ===" fi