You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现:Build Docker Image成功或未触发时触发目标GitHub工作流?

解决方案

要实现你的需求,核心是避免push事件同时触发两个工作流,同时保证两种场景下CI - Tests & Quality都能正确运行。这里提供两种可行方案:

方案一:通过触发器路径过滤(推荐)

直接在push触发器中排除Dockerfile相关变更,让这类场景下仅由workflow_run触发CI工作流;无Dockerfile变更时,仍由push直接触发。

修改后的CI - Tests & Quality配置:

name: CI - Tests & Quality

on:
  push:
    branches: [ main, develop ]
    # 当提交包含Dockerfile变更时,不通过push触发本工作流
    paths-ignore:
      - 'Dockerfile'
      # 如果有Docker相关的其他文件(如docker-compose.yml),也可一并添加
  pull_request:
    branches: [ main, develop ]
  workflow_run:
    workflows: ["Build Docker Image"]
    types: [ completed ]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  DOCKER_IMAGE: ${{ secrets.DOCKERHUB_USERNAME }}/vision

jobs:
  verify-image:
    name: Verify Docker Image
    runs-on: ubuntu-latest
    # 仅在workflow_run事件且Build工作流成功时,或非workflow_run事件时运行
    if: |
      github.event_name != 'workflow_run' ||
      (github.event.workflow_run.conclusion == 'success')
    # ... 后续步骤

配合Build Docker Image的触发条件(需确保):

该工作流仅在Dockerfile变更时触发:

name: Build Docker Image

on:
  push:
    branches: [ main, develop ]
    paths:
      - 'Dockerfile'
  # 其他触发器(如workflow_dispatch)...

# ... 工作流步骤

方案二:通过Job条件判断过滤

如果不想修改触发器路径,可在Job的if条件中添加逻辑,判断push事件是否包含Dockerfile变更,若包含则跳过当前运行,等待workflow_run触发。

修改后的Job条件:

jobs:
  verify-image:
    name: Verify Docker Image
    runs-on: ubuntu-latest
    if: |
      # PR和手动触发直接运行
      (github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch') ||
      # workflow_run事件仅在Build成功时运行
      (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success') ||
      # push事件仅在无Dockerfile变更时运行
      (github.event_name == 'push' && !contains(github.event.head_commit.modified, 'Dockerfile'))
    # ... 后续步骤

注意事项:

  • 如果Dockerfile在子目录(如./docker/Dockerfile),需将路径改为对应完整路径。
  • github.event.head_commit.modified仅适用于单个提交的场景,若为批量推送(多个提交),需结合git diff命令在步骤中判断变更文件。

内容的提问来源于stack exchange,提问作者Vincent Decaux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:13:17