在CircleCI中构建和测试Golang v1.11项目(以及如何启用模块支持)
在CircleCI中构建和测试Golang v1.11项目(以及如何启用模块支持) 大家好,
我本周早些时候写了一篇博客文章,介绍了如何在 CircleCI 上启用模块支持来构建 Go v1.11 项目。你可以在这里找到它。
如有任何问题或反馈,请在此处留言。
首先,对我列出的缓存方法有什么意见吗?据我了解,Go 会有两个缓存:下载的模块缓存和“构建缓存”。后者在 CI 环境中应该没什么用,对吧?
更多关于在CircleCI中构建和测试Golang v1.11项目(以及如何启用模块支持)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 CircleCI 中为 Go v1.11 项目启用模块支持时,你的缓存方法基本正确。Go v1.11 引入了模块支持,并有两个主要缓存:模块缓存(存储下载的依赖项,位于 $GOPATH/pkg/mod)和构建缓存(存储编译结果,位于 $GOCACHE)。在 CI 环境中,模块缓存可以显著提升构建速度,因为它避免了重复下载依赖;而构建缓存通常用处不大,因为 CI 作业通常是独立的,不会重用之前的构建输出。
以下是一个示例 CircleCI 配置文件(.circleci/config.yml),展示如何配置 Go v1.11 项目,启用模块支持并优化缓存。这个配置假设你的项目使用 Go 模块,并缓存模块目录以提高效率。
version: 2.1
jobs:
build:
docker:
- image: circleci/golang:1.11 # 使用 Go v1.11 官方镜像
working_directory: /go/src/your-project # 替换为你的项目路径
steps:
- checkout
- restore_cache:
keys:
- go-mod-v1-{{ checksum "go.sum" }} # 基于 go.sum 恢复模块缓存
- run:
name: Enable Go Modules
command: |
echo "export GO111MODULE=on" >> $BASH_ENV # 启用 Go 模块支持
source $BASH_ENV
- run:
name: Download Dependencies
command: go mod download # 下载模块依赖,使用模块缓存
- save_cache:
key: go-mod-v1-{{ checksum "go.sum" }}
paths:
- "/go/pkg/mod" # 缓存模块目录,避免重复下载
- run:
name: Build and Test
command: |
go build -o myapp . # 构建项目
go test ./... # 运行所有测试
在这个配置中:
- 我们使用
circleci/golang:1.11镜像确保 Go v1.11 环境。 - 通过设置
GO111MODULE=on启用模块支持。 - 使用
go mod download下载依赖,并基于go.sum文件缓存模块目录(/go/pkg/mod)。这利用了模块缓存,减少了网络下载时间。 - 构建缓存(默认在
$GOCACHE)没有被显式缓存,因为在 CI 中,它通常不会带来显著收益,且可能增加缓存大小。
对于你的问题:是的,在 CI 环境中,构建缓存用处不大,因为每次作业都是干净的,且编译输出可能不重复使用。模块缓存是关键优化点。如果你的项目有特定需求(如大型依赖),可以进一步调整缓存策略。
如果有具体错误或性能问题,提供更多细节我可以帮助分析。

