Skip to content

Golang 项目 CI 入门:3 步配置 GitHub Actions 自动化单元测试

如何使用 grpcurl 命令行工具测试你的 gRPC 服务示意图

自动化测试是保证代码质量的第一道防线,而 GitHub Actions 让这一切变得简单高效。

在 Golang 项目开发中,每次代码变更后手动运行测试既繁琐又容易遗漏。GitHub Actions 提供了强大的 CI/CD 能力,让我们能够轻松实现代码推送或合并请求时自动运行单元测试。本文将手把手教你如何快速配置。

为什么需要自动化测试?

  • 及时发现问题:每次提交代码时自动运行测试,第一时间发现回归问题
  • 保证代码质量:强制执行 go vet 静态分析,避免潜在错误
  • 提升协作效率:团队成员无需关心测试环境配置,统一在云端执行
  • 节省时间:自动化流程释放了开发者手动测试的时间

准备工作

在开始之前,请确保:

  • 你的项目已经托管在 GitHub 上
  • 项目根目录包含 go.mod 文件(Go Module 项目)
  • 如果你有私有依赖库,需要准备一个具有读取权限的 GitHub Personal Access Token

第一步:创建测试工作流配置文件

在项目根目录下,创建工作流配置文件:

bash
mkdir -p .github/workflows && touch .github/workflows/test.yaml

第二步:编写工作流配置

编辑 .github/workflows/test.yaml 文件,内容如下:

yaml
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go

name: test

on:
  push:
    branches: [ "master", "feature/*", "refactor/*", "perf/*" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    # 设置环境变量
    env:
      # 通过访问运行模式环境变量加载配置文件
      GENERAL_RUNNING_MODE: workflow
      # 如果某个组织全部是私有的,那么不用单独列出每一个库,只需要指定组织即可
      # GOPRIVATE: github.com/go-discovery,github.com/go-microservice
      ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
    steps:
      - uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          # 指定Go版本号(取消注释下面这行可以固定版本)
          # go-version: '1.22.3'
          # 推荐:从go.mod中自动读取Go版本号
          go-version-file: 'go.mod'

      - name: Configure Git with access token
        run: git config --global url.https://[email protected]/.insteadOf https://github.com/

      - name: Build
        run: go build -v ./...

      - name: Static code analysis
        run: go vet ./...

      - name: Test
        run: go test -race -count=1 -v ./...

第三步:配置仓库访问令牌

如果你的项目依赖私有库,需要配置访问令牌:

  1. 访问你的 GitHub 项目仓库
  2. 进入 SettingsSecrets and variablesActions
  3. Repository secrets 选项卡中,点击 New repository secret
  4. 创建一个名为 ACCESS_TOKEN 的密钥,值为你的 GitHub Personal Access Token

提示

如果没有私有依赖,可以删除配置中关于 ACCESS_TOKEN 的部分,简化为公开仓库的标准配置。

工作流执行流程

当你完成配置并推送代码后,GitHub Actions 会自动执行以下流程:

触发条件说明

工作流在以下情况会被触发:

  • Push 事件:推送到 masterfeature/*refactor/*perf/* 分支
  • Pull Request 事件:向 master 分支发起 PR

你可以根据项目实际情况调整分支名称和触发条件。

测试命令详解

bash
go test -race -count=1 -v ./...
  • -race:启用竞态检测,发现数据竞争问题
  • -count=1:禁用测试缓存,确保每次都重新运行
  • -v:输出详细日志,便于排查问题
  • ./...:测试所有子包

常见问题

1. 如何固定 Go 版本?

注释掉 go-version-file,取消注释 go-version 并指定版本号即可。

2. 私有依赖拉取失败怎么办?

检查以下几点:

  • ACCESS_TOKEN 是否正确配置
  • 令牌是否具有 reporead:packages 权限
  • GOPRIVATE 是否正确设置

3. 如何跳过某些目录的测试?

可以在 go test 命令中排除特定包,例如:

bash
go test -race -count=1 -v $(go list ./... | grep -v /vendor/)

4. 工作流运行时间太长怎么办?

可以考虑:

  • 使用 actions/cache 缓存 Go 模块
  • 使用矩阵策略并行测试多个 Go 版本
  • 只测试变更影响的包(高级用法)

结语

通过以上三步配置,你的 Golang 项目就拥有了完整的自动化测试能力。每次代码变更时,GitHub Actions 都会自动运行测试,确保代码质量。这是一个投资回报率极高的配置,值得每一个 Go 项目采用。

配置完成后,你可以在 GitHub 仓库的 Actions 选项卡中查看工作流的运行状态和历史记录。


延伸阅读

最后更新2026/07/15 15:38
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal