悠悠楠杉
网站页面
正文:
在当今快节奏的开发环境中,持续集成(CI)已成为保障代码质量的必备手段。对于Golang开发者而言,如何将测试流程无缝融入GitHub Actions流水线,是提升团队协作效率的关键。本文将手把手带你实现从零配置到高级优化的完整方案。
首先确保项目已使用Go Modules管理依赖。在项目根目录创建基础测试文件:
// service_test.go
package main
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("Expected 5, got %d", result)
}
}
通过go test -v命令可验证测试是否通过。但手动执行测试显然不够高效,我们需要将其自动化。
在项目.github/workflows目录下创建go-ci.yml文件:
name: Go CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: '1.21'
- run: go test -v ./...
- run: go vet ./...
- run: go fmt ./...
这个基础配置实现了:
1. 代码检出后自动安装指定Go版本
2. 运行所有测试用例(./...匹配所有子目录)
3. 执行静态代码分析(vet)和格式检查(fmt)
在go-ci.yml中追加:
- run: go test -coverprofile=coverage.out ./...
- run: go tool cover -html=coverage.out -o coverage.html
- uses: actions/upload-artifact@v3
with:
name: coverage-report
path: coverage.html
这会在每次测试后生成可视化覆盖率报告,并作为产物供下载查看。
修改jobs配置实现矩阵测试:
strategy:
matrix:
go-version: ['1.19', '1.20', '1.21']
steps:
- uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
添加依赖缓存加速流程:
- uses: actions/cache@v3
with:
path: |
~/go/pkg/mod
${{ github.workspace }}/go.sum
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
GOPRIVATE环境变量,并在workflow中添加:
env:
GOPRIVATE: ${{ secrets.GOPRIVATE }}
-run参数拆分测试用例:
go test -v -run TestFeatureA ./...
go test -race ./...
name: Advanced Go CI
on:
push:
branches: [ main ]
pull_request:
branches: [ '*' ]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: ['1.19', '1.20', '1.21']
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: Cache dependencies
uses: actions/cache@v3
with:
path: |
~/go/pkg/mod
${{ github.workspace }}/go.sum
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
- name: Run tests
run: |
go test -v -coverprofile=coverage.out ./...
go tool cover -func=coverage.out
- name: Check race conditions
run: go test -race ./...
- name: Upload coverage
uses: codecov/codecov-action@v3
随着项目发展,还可进一步集成性能基准测试(go test -bench)和自定义检查工具。记住,好的CI流程应该像呼吸一样自然——无需刻意关注,却始终默默守护代码健康。