GitHub Actions任务跳过问题:前后端Docker自动构建推送失效
问题分析与解决方案
问题根源
你的GitHub Actions任务被跳过,核心原因是github.event.head_commit.modified仅能获取单个提交的变更文件列表。如果推送的是多个提交、合并分支或批量修改,这个字段会缺失或无法覆盖所有变更路径,导致条件判断失效,job直接被跳过。
修改后的配置
name: Docker build and push on: push: branches: - main paths: - "front/**" - "backend/**" jobs: build_and_push_frontend: runs-on: ubuntu-latest # 改用github.event.paths判断,适配多提交场景 if: contains(toJson(github.event.paths), 'front/') steps: - name: Checkout Repository uses: actions/checkout@v2 - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Meta for Frontend id: docker_meta_frontend uses: docker/metadata-action@v3 with: # 改为完整的Docker Hub镜像名,格式:用户名/镜像名 images: ${{ secrets.DOCKERHUB_USERNAME }}/front - name: Build and Push Frontend Docker Image uses: docker/build-push-action@v2 with: context: ./front file: ./front/Dockerfile platforms: linux/amd64 push: true tags: ${{ steps.docker_meta_frontend.outputs.tags }} labels: ${{ steps.docker_meta_frontend.outputs.labels }} build_and_push_backend: runs-on: ubuntu-latest # 同理修改后端的判断条件 if: contains(toJson(github.event.paths), 'backend/') steps: - name: Checkout Repository uses: actions/checkout@v2 - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Meta for Backend id: docker_meta_backend uses: docker/metadata-action@v3 with: # 改为完整的Docker Hub镜像名 images: ${{ secrets.DOCKERHUB_USERNAME }}/backend - name: Build and Push Backend Docker Image uses: docker/build-push-action@v2 with: context: ./backend file: ./backend/Dockerfile platforms: linux/amd64 push: true tags: ${{ steps.docker_meta_backend.outputs.tags }} labels: ${{ steps.docker_meta_backend.outputs.labels }}
关键修改说明
- 条件判断替换:用
github.event.paths替代github.event.head_commit.modified,该字段会返回push事件中所有变更文件的完整路径数组,通过toJson转换为字符串后,contains可以准确检测到是否有对应目录的变更,适配所有提交场景。 - 镜像名修正:
docker/metadata-action的images字段必须填写完整的Docker Hub镜像路径(用户名/镜像名),否则无法成功推送镜像到Docker Hub。
内容的提问来源于stack exchange,提问作者brgndy
相关产品推荐
相关产品推荐

