fix(ci): ensure_persistent_builder 并发安全 - create 失败时若已被并发 job 创建则复用

This commit is contained in:
2026-08-29 14:18:42 +08:00
parent 3a41c9b598
commit 77d582f13a
+15 -4
View File
@@ -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