You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用GitHub Actions在推送至主分支前运行自动化测试的可行性及实现方法

问题解答

1. 是否可以实现?

完全可以,但要明确:GitHub Actions本身是在代码推送/提交后触发的,没法直接拦截推送动作。但结合GitHub的分支保护规则,就能实现「测试不通过则禁止代码进入main分支」的效果——不管是直接推main,还是通过PR合并到main,都得先过自动化测试这一关。你的流程可以落地为:
新代码→提交到开发分支→推送到远程开发分支→触发Actions跑测试→测试通过后,才能合并到main(如果强制要求PR合并,就没法直接推main)

2. 具体实现步骤

第一步:添加GitHub Actions测试工作流

在仓库根目录新建.github/workflows文件夹,再创建一个test.yml文件(文件名可自定义,后缀必须是.yml),以下是Node.js项目的示例(根据你的技术栈调整命令即可):

name: 自动化测试
on:
  # 推送到main分支、或PR指向main时触发
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  run-tests:
    runs-on: ubuntu-latest
    steps:
      # 拉取仓库代码
      - name: 拉取代码
        uses: actions/checkout@v4

      # 配置运行环境(比如Python用setup-python,Java用setup-java)
      - name: 设置Node.js环境
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      # 安装依赖
      - name: 安装项目依赖
        run: npm install

      # 执行测试命令
      - name: 运行自动化测试
        run: npm test

这个工作流会在指定场景下自动拉取代码、装依赖、跑测试,测试结果会同步到仓库的状态检查中。

第二步:配置分支保护规则

  1. 进入仓库的「Settings」→「Branches」→「Branch protection rules」,点击「Add rule」
  2. 「Branch name pattern」填main
  3. 勾选「Require status checks to pass before merging」,然后在下方搜索框找到你刚才创建的工作流名称(比如「自动化测试」),把它加入必填检查项
  4. 要是想彻底禁止直接推main,就勾选「Require a pull request before merging」,这样所有人都必须通过PR合并代码到main,而PR必须先过测试才能合并
  5. 可选:勾选「Do not allow bypassing the above settings」,确保管理员也不能跳过规则
  6. 点击「Create」保存规则

验证效果

  • 直接推未通过测试的代码到main:GitHub会拦截推送,提示分支保护规则要求状态检查通过
  • 开PR到main:PR页面会显示测试状态,测试失败时无法合并,测试通过后才能合并到main

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

火山引擎 最新活动