如何同时按源和目标分支过滤PR,阻止发布分支触发CI?
实现PR的源+目标分支双重过滤
当然可以同时按源和目标分支来过滤CI触发条件,以主流的GitHub Actions为例,你可以通过事件配置和上下文变量组合实现精确控制,完全满足你的需求。
场景1:仅对「目标是master且源不是release/master」的PR触发测试
如果你的核心需求是:原本对所有指向master的PR跑测试,但从release/master发起的PR(往master合)不需要触发,可以这么写工作流配置:
on: pull_request: # 先限定PR的目标分支为master branches: - master # 可选:如果版本更新只涉及特定文件,直接忽略这些文件的变更触发 paths-ignore: - 'package.json' - 'package-lock.json' types: [opened, synchronize, reopened] jobs: run-tests: runs-on: ubuntu-latest # 在这里添加条件:排除源分支是release/master的情况 if: github.head_ref != 'release/master' steps: - uses: actions/checkout@v4 - name: Install dependencies run: npm install - name: Run test suite run: npm test
场景2:完全排除所有和release/master相关的PR
如果要做到不管是目标是release/master,还是源是release/master的PR,都不触发CI,可以调整成:
on: pull_request: branches: - master # 先排除目标分支是release/master的PR branches-ignore: - release/master types: [opened, synchronize, reopened] jobs: run-tests: runs-on: ubuntu-latest # 再排除源分支是release/master的情况 if: github.head_ref != 'release/master' steps: - uses: actions/checkout@v4 - run: npm install && npm test
其他CI工具的思路
如果用的是GitLab CI、Jenkins等其他工具,核心逻辑一致:找到CI提供的「源分支」和「目标分支」上下文变量,在流水线的触发规则或任务执行条件中添加判断,排除release/master相关的分支组合即可。
内容的提问来源于stack exchange,提问作者rschristian
相关产品推荐
相关产品推荐

