fix(ci): ensure_persistent_builder 并发安全 - create 失败时若已被并发 job 创建则复用
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user