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

如何基于另一Workflow的触发与运行状态配置GitHub Action条件执行

问题分析

当前配置存在两个核心问题:

  1. 当A和B同时被push触发时,B会被push和workflow_run同时触发,导致两个B实例并行运行,不符合"先A后B"的要求;
  2. 仅触发A时,A完成后会通过workflow_run触发B,违反了"仅触发A时B无需执行"的规则。

调整方案

核心思路

  • 让B的push触发仅在未同时触发A的场景下生效;
  • 在A中新增条件触发逻辑:仅当本次触发A的事件同时满足B的触发条件时,才在A完成后触发B;
  • 保留手动触发能力,确保按需运行。

修改后的配置

Workflow A(A.yml)
name: A

on:
  push:
    branches: [main]
    paths:
      - "java/src/test/**/*"
  workflow_dispatch:

jobs:
  # 保留你原有的A执行任务
  a-main-job:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      # 这里添加A的其他执行步骤

  # 新增:仅当本次push同时涉及B的触发路径时,在A完成后触发B
  trigger-b-on-demand:
    runs-on: ubuntu-latest
    needs: a-main-job # 等待A的主任务执行完成
    if: >
      github.event_name == 'push' &&
      contains(github.event.head_commit.modified, 'java/src/main/')
    steps:
      - uses: actions/github-script@v6
        with:
          script: |
            github.rest.actions.createWorkflowDispatch({
              owner: context.repo.owner,
              repo: context.repo.repo,
              workflow_id: 'B.yml', // 替换为你的Workflow B实际文件名
              ref: context.ref
            })
Workflow B(B.yml)
name: B

on:
  push:
    branches: [main]
    paths:
      - "java/src/main/**/*"
    paths-ignore:
      - "java/src/test/**/*" # 排除同时触发A的场景
  workflow_dispatch: # 保留手动触发入口

jobs:
  b-main-job:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      # 这里添加B的其他执行步骤

逻辑验证

  1. A和B同时触发:push同时修改java/src/test/和java/src/main/下的文件时,A被正常触发;B的push触发因paths-ignore被拦截,等待A完成后,由A的trigger-b-on-demand任务触发B,实现先A后B;
  2. 仅触发A:push仅修改java/src/test/文件时,A正常执行,trigger-b-on-demand的条件不满足,不会触发B;
  3. 仅触发B:push仅修改java/src/main/文件时,B的push触发条件满足,直接运行;手动触发workflow_dispatch也可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:33:25