如何在GitHub Actions中指定PR的源-目标分支组合触发工作流?
实现特定source-target分支组合触发GitHub Actions工作流
GitHub Actions的pull_request触发器本身不支持直接指定源分支与目标分支的组合,但可以通过job级别的条件判断实现这个需求,精准控制仅当PR满足dev→main的分支组合时,才执行预生产检查工作流。
方案一:先限定目标分支,再判断源分支
这种方式先通过触发器限定目标分支为main,减少不必要的工作流初始化,再在job中判断源分支是否为dev:
name: 预生产检查工作流 on: pull_request: types: [opened, synchronize, reopened] branches: [main] # 仅目标分支为main的PR会触发工作流初始化 jobs: pre-production-check: runs-on: ubuntu-latest # 仅当源分支为dev时,才执行该job if: github.event.pull_request.head.ref == 'dev' steps: - name: 检出代码 uses: actions/checkout@v4 - name: 执行预生产检查 run: | echo "执行dev→main分支组合的预生产检查" # 替换为你的实际检查命令(如构建、测试、合规扫描等)
方案二:直接判断分支组合
如果需要更灵活的分支组合判断,可以去掉触发器的branches限制,直接在job的条件中同时校验源分支和目标分支:
name: 预生产检查工作流 on: pull_request: types: [opened, synchronize, reopened] jobs: pre-production-check: runs-on: ubuntu-latest # 同时校验目标分支为main、源分支为dev if: github.event.pull_request.base.ref == 'main' && github.event.pull_request.head.ref == 'dev' steps: - name: 检出代码 uses: actions/checkout@v4 - name: 执行预生产检查 run: | echo "执行dev→main分支组合的预生产检查" # 替换为你的实际检查命令
原理说明
GitHub Actions提供的github.event.pull_request对象包含了PR的完整信息:
base.ref:PR的目标分支名称head.ref:PR的源分支名称
通过在job级别添加if条件,就能精准过滤出符合要求的分支组合,既满足你的预生产检查需求,又不会限制其他分支的正常流程。
内容的提问来源于stack exchange,提问作者jkix
相关产品推荐
相关产品推荐

