e0c3bae072
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Successful in 44s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m11s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
Worker Base Image Build / Build Worker Base Images (worker-base-builder-cache, infra/docker/worker-base-builder.Dockerfile, worker-base-builder, builder) (push) Failing after 3m41s
Worker Base Image Build / Build Worker Base Images (worker-base-runtime-cache, infra/docker/worker-base-runtime.Dockerfile, worker-base-runtime, runtime) (push) Failing after 1m11s
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (push) Failing after 4m40s
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
104 lines
3.7 KiB
YAML
104 lines
3.7 KiB
YAML
name: Worker Base Image Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- develop
|
|
- main
|
|
paths:
|
|
- 'requirements-base.txt'
|
|
- 'requirements-worker.txt'
|
|
- 'infra/docker/worker-base-builder.Dockerfile'
|
|
- 'infra/docker/worker-base-runtime.Dockerfile'
|
|
workflow_dispatch: # 支持手动触发
|
|
|
|
jobs:
|
|
build-worker-base:
|
|
name: Build Worker Base Images
|
|
runs-on: runtime-builder
|
|
timeout-minutes: 30
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: builder
|
|
dockerfile: infra/docker/worker-base-builder.Dockerfile
|
|
image_name: worker-base-builder
|
|
cache_name: worker-base-builder-cache
|
|
- name: runtime
|
|
dockerfile: infra/docker/worker-base-runtime.Dockerfile
|
|
image_name: worker-base-runtime
|
|
cache_name: worker-base-runtime-cache
|
|
steps:
|
|
- name: Checkout code
|
|
shell: sh
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
run: |
|
|
curl -sH "Authorization: token $GITHUB_TOKEN" "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/raw/scripts/ci/step_checkout.sh?ref=${GITHUB_SHA}" | bash
|
|
|
|
- name: Docker login to Registry
|
|
shell: sh
|
|
env:
|
|
ACR_USERNAME: ${{ secrets.ACR_USERNAME }}
|
|
ACR_PASSWORD: ${{ secrets.ACR_PASSWORD }}
|
|
GITEA_REGISTRY_USER: xiaoxia
|
|
GITEA_REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
|
run: |
|
|
set -eu
|
|
for i in 1 2 3; do
|
|
echo "=== Docker login 尝试 $i/3 ==="
|
|
if printf '%s' "${ACR_PASSWORD}" | docker login xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com -u "${ACR_USERNAME}" --password-stdin && docker login git.xiaoxiajianji.com -u "${GITEA_REGISTRY_USER}" -p "${GITEA_REGISTRY_TOKEN}"; then
|
|
echo "✅ Docker login successful"
|
|
break
|
|
fi
|
|
echo "❌ Docker login 失败(尝试 $i/3),5s 后重试..."
|
|
sleep 5
|
|
done
|
|
|
|
- name: Setup buildx builder
|
|
shell: sh
|
|
run: |
|
|
set -eu
|
|
BUILDER_NAME="ci-builder-${GITHUB_RUN_ID}-${{ matrix.name }}"
|
|
if ! docker buildx inspect "$BUILDER_NAME" > /dev/null 2>&1; then
|
|
docker buildx create --use --name "$BUILDER_NAME" --driver docker-container
|
|
echo "Created $BUILDER_NAME"
|
|
else
|
|
docker buildx use "$BUILDER_NAME"
|
|
echo "Using existing $BUILDER_NAME"
|
|
fi
|
|
docker buildx inspect --bootstrap
|
|
|
|
- name: Build and push base image
|
|
shell: sh
|
|
run: |
|
|
set -eu
|
|
REGISTRY="xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji"
|
|
IMAGE_TAG="${REGISTRY}/${{ matrix.image_name }}:latest"
|
|
SAFE_REF_NAME=$(echo "${GITHUB_REF_NAME}" | tr '/' '-')
|
|
CACHE_REF="${REGISTRY}/${{ matrix.cache_name }}:${SAFE_REF_NAME}"
|
|
|
|
echo "=== Building ${{ matrix.name }} base image ==="
|
|
echo "Image: ${IMAGE_TAG}"
|
|
echo "Cache: ${CACHE_REF}"
|
|
|
|
# 用通用构建脚本
|
|
bash scripts/ci/docker_build_push.sh ${{ matrix.dockerfile }} "${IMAGE_TAG}" "${CACHE_REF}"
|
|
|
|
# 同时推送到 Gitea Packages 作为备份(可选)
|
|
GITEA_IMAGE="git.xiaoxiajianji.com/xiaoxia-saas/${{ matrix.image_name }}:latest"
|
|
docker tag "${IMAGE_TAG}" "${GITEA_IMAGE}"
|
|
docker push "${GITEA_IMAGE}" || echo "Gitea Packages push failed (non-fatal)"
|
|
|
|
echo ""
|
|
echo "✅ ${{ matrix.name }} base image built and pushed"
|
|
|
|
- name: Cleanup buildx builder
|
|
if: always()
|
|
shell: sh
|
|
run: |
|
|
docker buildx rm "ci-builder-${GITHUB_RUN_ID}-${{ matrix.name }}" 2>/dev/null || true
|
|
docker buildx prune -f 2>/dev/null || true
|
|
echo "Builder cleanup done"
|