Golang CI/CD流水线搭建

最近在尝试用Golang搭建CI/CD流水线,但遇到一些问题想请教大家:

  1. 有没有推荐的Golang CI/CD工具链?比如Jenkins、GitHub Actions、Drone等,哪种更适合Golang项目?
  2. 测试覆盖率检测和代码质量检查应该如何集成到流水线中?有没有好用的Golang工具推荐?
  3. 在多阶段构建时,如何优化Golang的Docker镜像大小?比如使用多阶段构建或scratch镜像有什么注意事项?
  4. 部署环节对于Golang编译后的二进制文件,有什么最佳实践吗?比如是否需要搭配Nginx等反向代理?
    希望有经验的朋友能分享一下实际项目中的搭建心得,谢谢!

更多关于Golang CI/CD流水线搭建的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

推荐使用GitLab CI或GitHub Actions。配置.gitlab-ci.yml.github/workflows/ci.yml文件,集成golangci-lint、go test、go build等步骤。可搭配Docker镜像提升环境一致性。

更多关于Golang CI/CD流水线搭建的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang项目中搭建CI/CD流水线,推荐使用以下主流工具组合:

1. GitHub Actions(推荐)

创建 .github/workflows/ci.yml

name: Go CI/CD

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: '1.21'
    
    - name: Build
      run: go build -v ./...
    
    - name: Test
      run: go test -v ./...
    
    - name: Run golangci-lint
      uses: golangci/golangci-lint-action@v3
      with:
        version: latest

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
    - uses: actions/checkout@v4
    - name: Deploy to production
      run: echo "Deploying..."
      # 添加你的部署脚本

2. GitLab CI

创建 .gitlab-ci.yml

stages:
  - test
  - build
  - deploy

variables:
  GO_VERSION: "1.21"

before_script:
  - apt-get update -yqq
  - apt-get install -yqq git
  - git version

test:
  stage: test
  image: golang:$GO_VERSION
  script:
    - go version
    - go test -v ./...
    - go build -o myapp

build:
  stage: build
  image: golang:$GO_VERSION
  script:
    - go build -ldflags "-s -w" -o myapp
  artifacts:
    paths:
      - myapp

deploy:
  stage: deploy
  script:
    - echo "Deploying application..."
  only:
    - main

3. 关键配置要点

依赖管理

# 使用 Go Modules
go mod init your-project
go mod tidy

代码质量检查

# 安装 golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.54.2

# 配置 .golangci.yml
linters:
  enable:
    - govet
    - errcheck
    - staticcheck
    - gosec

测试覆盖率

- name: Test with coverage
  run: |
    go test -coverprofile=coverage.out -covermode=atomic ./...
    go tool cover -html=coverage.out -o coverage.html

4. 最佳实践

  1. 缓存依赖:缓存 Go modules 加速构建
  2. 多阶段构建:使用 Docker 多阶段构建减小镜像大小
  3. 安全扫描:集成安全扫描工具(trivy、gosec)
  4. 通知机制:集成 Slack/Teams 通知构建状态

选择适合你团队的工具,GitHub Actions 适合开源项目,GitLab CI 适合企业私有部署。

回到顶部