GitHub如何配置指定分支推送后自动创建PR并测试通过自动合并
定向dev→staging自动合并的GitHub Actions原生实现方案
完全基于GitHub原生生态实现,无需依赖Teamcity等第三方CI工具,自动合并能力仅对dev到staging的单条分支流转生效,不会开启仓库全局自动合并。
前置仓库配置
先完成基础权限配置,保证Workflow有足够的执行权限:
- 进入仓库Settings > Actions > General页面,找到Workflow permissions项,选择Read and write permissions,同时勾选Allow GitHub Actions to create and approve pull requests,保存设置
- 给staging分支配置分支保护规则,将你预设的测试流程设为必填合并检查,不要开启仓库全局自动合并开关,所有合并操作仅通过Workflow触发
完整Workflow代码
在仓库.github/workflows/目录下新建auto-dev-to-staging.yml文件,内容如下:
name: Auto Merge dev to staging on: push: branches: [ dev ] workflow_dispatch: # 支持手动触发,满足手动创建PR的需求 permissions: contents: write pull-requests: write checks: read jobs: auto-sync: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Create dev to staging PR if not exists id: create-pr uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.GITHUB_TOKEN }} branch: dev base: staging title: "[Auto Sync] Merge dev changes to staging" body: | This PR is automatically created by GitHub Actions, syncing latest changes from dev to staging. All required tests will run automatically, PR will be merged once all checks pass. labels: | auto-sync delete-branch: false # 仅对当前创建的PR单独开启自动合并,完全不影响仓库全局自动合并设置 auto-merge: true auto-merge-method: merge # 可按需替换为squash/rebase - name: Print PR info if: steps.create-pr.outputs.pull-request-operation == 'created' run: echo "Successfully created PR #${{ steps.create-pr.outputs.pull-request-number }}"
执行流程说明
配置完成后会完全匹配预期流转逻辑:
- 开发人员将feature分支合入dev分支后,push事件会自动触发该Workflow
- Workflow首先会检查当前是否已存在从dev指向staging的未合并PR,如果已存在就会直接更新PR内容,不会重复创建
- PR创建/更新后会自动触发仓库内已配置的所有预设测试流程,和人工创建PR的触发逻辑完全一致
- 方案中的自动合并是针对单个PR的独立设置,不会修改仓库全局的自动合并开关,所有其他分支组合、人工创建的PR都不会被自动合并,完全满足定向生效的要求。当staging分支保护要求的所有必填测试用例全部通过后,GitHub会自动完成PR合并,全程不需要人工介入
- 如果测试执行失败,PR会保持打开状态,开发人员可以查看测试日志修复问题,修复后的代码推送到dev分支后会自动同步到该PR,重新触发测试
- 需要手动触发PR创建时,直接进入仓库Actions页面,选择对应Workflow点击Run workflow即可,后续测试、自动合并逻辑和自动触发完全一致
可选自定义调整
你可以根据自己的项目需求修改配置:
- 调整合并方式:修改
auto-merge-method参数,可选merge(保留全部分支合并提交记录)、squash(将所有提交压缩为单个提交合并)、rebase(变基合并) - 自定义PR规则:可以修改PR标题、正文内容,增加专属标签、指定评审人等
- 增加通知节点:可以在Workflow末尾新增步骤,在合并成功、测试失败等节点推送通知到内部协作工具
- 调整触发条件:如果不需要每次推dev都触发,可以修改push触发规则,比如仅当dev分支有特定标签、特定路径变更时触发
内容的提问来源于stack exchange,提问作者Marcus Anthony
相关产品推荐
相关产品推荐

