在CircleCI中构建和测试Golang v1.11项目(以及如何启用模块支持)

在CircleCI中构建和测试Golang v1.11项目(以及如何启用模块支持) 大家好,

我本周早些时候写了一篇博客文章,介绍了如何在 CircleCI 上启用模块支持来构建 Go v1.11 项目。你可以在这里找到它。

如有任何问题或反馈,请在此处留言。

首先,对我列出的缓存方法有什么意见吗?据我了解,Go 会有两个缓存:下载的模块缓存和“构建缓存”。后者在 CI 环境中应该没什么用,对吧?

1 回复

更多关于在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 环境中,构建缓存用处不大,因为每次作业都是干净的,且编译输出可能不重复使用。模块缓存是关键优化点。如果你的项目有特定需求(如大型依赖),可以进一步调整缓存策略。

如果有具体错误或性能问题,提供更多细节我可以帮助分析。

回到顶部