From 1b7aa6028d4fb01bc1f6017c17c4d9570d1c52db Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 24 Jul 2026 09:42:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20pre-build=E6=AD=A5=E9=AA=A4buildx?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E8=87=AA=E5=8A=A8=E5=9B=9E=E9=80=80docker=20?= =?UTF-8?q?build=EF=BC=8C=E6=A0=B9=E6=B2=BBDooD=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?buildkitd=E5=B4=A9=E6=BA=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/ci-pipeline.yml | 57 +++++++++++++++----------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/.gitea/workflows/ci-pipeline.yml b/.gitea/workflows/ci-pipeline.yml index db1da1ead..1556e3e48 100755 --- a/.gitea/workflows/ci-pipeline.yml +++ b/.gitea/workflows/ci-pipeline.yml @@ -645,42 +645,37 @@ jobs: else echo "基础镜像不存在,本地构建(fallback模式)..." - # 构建builder基础镜像 - echo "构建 worker-base-builder..." - # 用buildx docker-container驱动构建(兼容DooD模式:普通docker build看不到容器内文件) + # 尝试用buildx构建,失败则回退到普通docker build(DooD模式下buildx builder偶发崩溃) BUILDER_NAME="ci-pr-builder-${GITHUB_RUN_ID:-local}" - if ! docker buildx inspect "$BUILDER_NAME" > /dev/null 2>&1; then - docker buildx create --use --name "$BUILDER_NAME" --driver docker-container - else - docker buildx use "$BUILDER_NAME" + BUILDX_AVAILABLE=true + if ! docker buildx create --use --name "$BUILDER_NAME" --driver docker-container > /dev/null 2>&1; then + BUILDX_AVAILABLE=false + fi + if [ "$BUILDX_AVAILABLE" = true ] && ! docker buildx inspect --bootstrap > /dev/null 2>&1; then + BUILDX_AVAILABLE=false + docker buildx rm "$BUILDER_NAME" > /dev/null 2>&1 || true fi - docker buildx inspect --bootstrap > /dev/null 2>&1 - # 构建builder基础镜像(带重试,buildx容器偶发不稳定) - echo "构建 worker-base-builder..." - for attempt in 1 2 3; do - if docker buildx build --load -f infra/docker/worker-base-builder.Dockerfile -t "$BASE_BUILDER" .; then - echo "worker-base-builder 构建成功" - break + build_base() { + local df="$1" + local tag="$2" + local name="$3" + if [ "$BUILDX_AVAILABLE" = true ]; then + echo "构建 $name(buildx)..." + if docker buildx build --load -f "$df" -t "$tag" . > /dev/null 2>&1; then + echo "$name 构建成功" + return 0 + fi + echo "buildx失败,回退到普通docker build" + BUILDX_AVAILABLE=false + docker buildx rm "$BUILDER_NAME" > /dev/null 2>&1 || true fi - echo "worker-base-builder 构建失败,重试 $attempt/3..." - docker buildx rm "$BUILDER_NAME" 2>/dev/null || true - docker buildx create --use --name "$BUILDER_NAME" --driver docker-container - sleep 3 - done + echo "构建 $name(docker build)..." + docker build -f "$df" -t "$tag" . + } - # 构建runtime基础镜像 - echo "构建 worker-base-runtime..." - for attempt in 1 2 3; do - if docker buildx build --load -f infra/docker/worker-base-runtime.Dockerfile -t "$BASE_RUNTIME" .; then - echo "worker-base-runtime 构建成功" - break - fi - echo "worker-base-runtime 构建失败,重试 $attempt/3..." - docker buildx rm "$BUILDER_NAME" 2>/dev/null || true - docker buildx create --use --name "$BUILDER_NAME" --driver docker-container - sleep 3 - done + build_base infra/docker/worker-base-builder.Dockerfile "$BASE_BUILDER" "worker-base-builder" + build_base infra/docker/worker-base-runtime.Dockerfile "$BASE_RUNTIME" "worker-base-runtime" echo "fallback=true" >> $GITHUB_OUTPUT echo "基础镜像本地构建完成"