fix: api-base-image workflow 改用普通 docker build 避免 buildx push 问题
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m56s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m27s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m16s
AI Code Review / AI Code Review (pull_request) Successful in 6m20s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m36s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 5m20s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m32s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 5m59s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 14m16s
CI/CD Pipeline / CI Gate (pull_request) Successful in 10s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 1m14s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 693h25m58s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 693h25m59s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 693h26m0s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 693h26m1s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 693h40m11s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 693h40m14s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 693h42m46s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 693h42m46s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 693h42m47s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 693h42m48s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 693h42m48s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 693h59m40s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 693h59m41s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 694h13m53s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 694h16m27s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 694h16m29s

buildx --push 后镜像不在本地 daemon,导致后续 tag 失败。
改用普通 docker build + docker push 分步执行,更稳定可靠。
This commit is contained in:
xiaoxia
2026-08-18 17:43:37 +08:00
parent 394d8656b5
commit c57be3e47d
+23 -33
View File
@@ -15,7 +15,7 @@ jobs:
build-api-base:
name: Build API Base Image
runs-on: runtime-builder
timeout-minutes: 30
timeout-minutes: 45
steps:
- name: Checkout code
shell: sh
@@ -50,45 +50,35 @@ jobs:
shell: sh
run: |
set -eu
REGISTRY="xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji"
IMAGE_TAG="${REGISTRY}/saas-api-base:latest"
ACR_IMAGE="xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji/saas-api-base:latest"
GITEA_IMAGE="git.xiaoxiajianji.com/xiaoxia-saas/saas-api-base:latest"
echo "=== Building API base image (no registry cache, local cache only) ==="
echo "Image: ${IMAGE_TAG}"
echo "=== Building API base image ==="
# 使用本地缓存,避免 registry cache 导出导致 buildx 崩溃
LOCAL_CACHE="/tmp/buildx-cache/api-base-local"
mkdir -p "$LOCAL_CACHE"
# 创建或使用已有 builder
if ! docker buildx inspect api-base-builder > /dev/null 2>&1; then
docker buildx create --use --name api-base-builder --driver docker-container
else
docker buildx use api-base-builder
fi
docker buildx inspect --bootstrap
# 构建并推送(仅使用本地缓存,不使用 registry cache)
docker buildx build \
--platform linux/amd64 \
--cache-from "type=local,src=${LOCAL_CACHE}" \
--cache-to "type=local,dest=${LOCAL_CACHE},mode=max" \
# 使用普通 docker build(单平台不需要 buildx)
docker build \
-f infra/docker/api-base.Dockerfile \
-t "${IMAGE_TAG}" \
--push \
-t "${ACR_IMAGE}" \
.
# 同时推送到 Gitea Packages 作为备份
GITEA_IMAGE="git.xiaoxiajianji.com/xiaoxia-saas/saas-api-base:latest"
docker tag "${IMAGE_TAG}" "${GITEA_IMAGE}"
docker push "${GITEA_IMAGE}" || echo "Gitea Packages push failed (non-fatal)"
echo ""
echo "✅ API base image built and pushed: ${IMAGE_TAG}"
echo "✅ Image built successfully"
- name: Cleanup builder
# 推送到 ACR
echo "=== Pushing to ACR ==="
docker push "${ACR_IMAGE}"
echo "✅ Pushed to ACR"
# 打标签并推送到 Gitea Packages 作为备份
echo "=== Pushing to Gitea Packages ==="
docker tag "${ACR_IMAGE}" "${GITEA_IMAGE}"
docker push "${GITEA_IMAGE}" || echo "⚠️ Gitea Packages push failed (non-fatal)"
echo "✅ Gitea backup push completed"
- name: Cleanup
if: always()
shell: sh
run: |
docker buildx rm api-base-builder 2>/dev/null || true
echo "Builder cleanup done"
ACR_IMAGE="xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji/saas-api-base:latest"
docker rmi "${ACR_IMAGE}" 2>/dev/null || true
echo "Cleanup done"