From b5407a28c774eda018a8494a60a166926dbf7d23 Mon Sep 17 00:00:00 2001 From: 537yaha <2930134478@qq.com> Date: Tue, 31 Mar 2026 17:24:37 +0800 Subject: [PATCH] =?UTF-8?q?actions=E6=8F=90=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-build.yml | 99 ++++++++++++++++++++++++------ 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index b2ecfcb..3735f35 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,57 +1,116 @@ name: Build and Push Docker Image - on: push: - branches: [ master, main ] + branches: [master, main] + # 仅当构建相关文件变更时触发,避免无意义排队 + paths: + - "backend/**" + - "frontend/**" + - ".github/workflows/docker-build.yml" + - "docker-compose*.yml" workflow_dispatch: + inputs: + build_backend: + description: "手动触发时是否构建后端" + required: false + default: true + type: boolean + build_frontend: + description: "手动触发时是否构建前端" + required: false + default: true + type: boolean + +# 同一分支只保留最新一次,减少等待队列 +concurrency: + group: docker-build-${{ github.ref }} + cancel-in-progress: true jobs: - build-backend: + changes: runs-on: ubuntu-latest + outputs: + backend: ${{ steps.filter.outputs.backend }} + frontend: ${{ steps.filter.outputs.frontend }} steps: - name: Checkout code - uses: actions/checkout@v3 - + uses: actions/checkout@v4 + + - name: Detect changed paths + id: filter + uses: dorny/paths-filter@v3 + with: + filters: | + backend: + - "backend/**" + - ".github/workflows/docker-build.yml" + - "docker-compose*.yml" + frontend: + - "frontend/**" + - ".github/workflows/docker-build.yml" + - "docker-compose*.yml" + + build-backend: + runs-on: ubuntu-latest + needs: changes + if: | + github.event_name == 'workflow_dispatch' && inputs.build_backend == true || + github.event_name != 'workflow_dispatch' && needs.changes.outputs.backend == 'true' + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - + uses: docker/setup-buildx-action@v3 + - name: Log in to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Build and push backend - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v6 with: context: ./backend file: ./backend/Dockerfile push: true - tags: 537yaha/ai-cs-backend:latest + tags: | + 537yaha/ai-cs-backend:latest platforms: linux/amd64,linux/arm64 + # 使用 GitHub Actions 缓存构建层,显著减少重复构建时间 + cache-from: type=gha + cache-to: type=gha,mode=max build-frontend: runs-on: ubuntu-latest + needs: changes + if: | + github.event_name == 'workflow_dispatch' && inputs.build_frontend == true || + github.event_name != 'workflow_dispatch' && needs.changes.outputs.frontend == 'true' steps: - name: Checkout code - uses: actions/checkout@v3 - + uses: actions/checkout@v4 + - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - + uses: docker/setup-buildx-action@v3 + - name: Log in to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Build and push frontend - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v6 with: context: ./frontend file: ./frontend/Dockerfile push: true - tags: 537yaha/ai-cs-frontend:latest + tags: | + 537yaha/ai-cs-frontend:latest platforms: linux/amd64,linux/arm64 - # 前端统一走同域 /api(由反向代理转发到后端),无需在构建时注入 localhost/端口 \ No newline at end of file + # 前端统一走同域 /api(由反向代理转发到后端),无需在构建时注入 localhost/端口 + cache-from: type=gha + cache-to: type=gha,mode=max \ No newline at end of file