在Ubuntu上实现Golang项目持续集成(CI)可通过以下工具和步骤完成,以GitHub Actions为例:
项目结构
确保项目包含go.mod
文件(Go模块管理依赖),示例目录结构:
/your-project
├── go.mod
├── main.go
├── main_test.go
└── .github/workflows/ci.yml # CI配置文件
安装依赖工具
在Ubuntu上需安装git
、docker
(若需容器化构建),确保Go环境已配置:
sudo apt update && sudo apt install git docker.io
创建CI配置文件
在项目根目录的.github/workflows/
下新建ci.yml
,内容示例:
name: Go CI on Ubuntu
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21' # 指定Go版本
- name: Install dependencies
run: go mod tidy # 清理未用依赖并安装所需包
- name: Run tests
run: go test -v ./... # 执行单元测试
- name: Build binary
run: go build -o app main.go # 编译为可执行文件
提交并触发CI
将ci.yml
提交至GitHub仓库,每次push
或pull request
到main
分支时,GitHub会自动运行构建和测试流程,结果可在仓库的Actions标签页查看。
代码质量检查
集成golangci-lint
进行静态代码分析,在ci.yml
中添加步骤:
- name: Install golangci-lint
run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.54.2
- name: Lint code
run: golangci-lint run ./...
多平台构建
使用Docker或交叉编译生成不同系统的二进制文件,例如:
- name: Build for Linux
run: GOOS=linux GOARCH=amd64 go build -o app-linux
- name: Build for Windows
run: GOOS=windows GOARCH=amd64 go build -o app.exe
自动部署
若需部署到服务器,可在CI流程中添加scp
或docker push
步骤(需配置SSH密钥或Docker Hub凭证):
- name: Deploy to server
uses: appleboy/scp-action@v0.2.0
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
source: "app"
target: "/path/to/deploy"
工具 | 适用场景 | 优势 |
---|---|---|
GitHub Actions | 云原生、轻量级CI/CD | 与GitHub深度集成,支持多平台 |
GitLab CI | 企业级复杂流水线 | 内置容器注册、Kubernetes支持 |
Jenkins | 混合环境、定制化需求 | 插件丰富,支持多步骤流水线 |
go mod tidy
确保依赖版本一致。参考资料: