问题描述
我是新手,正在尝试弄清楚如何在我的 circleci 项目中执行构建步骤。
我注意到在 CircleCI Go orb 中没有使用 go build
,这让我感到困惑,因为在 CircleCI Go Language Guide 中,他们专门使用 go build
通过makefile。
所以我不确定单独使用 Go 球是否足够(尽管这对我来说似乎很奇怪)。我模糊地了解 go mod download 的作用以及 go build 的作用,但我已经看到 examples 将它们一起使用:
RUN go mod download
copY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
目前,根据 go orb 使用文档,我有:
build:
executor: go
steps:
- checkout
- go/load-cache:
key: go-mod-v1-{{ checksum "go.sum" }}
- go/mod-download
- go/save-cache:
key: go-mod-v1-{{ checksum "go.sum" }}
- slack/notify:
event: fail
template: basic_fail_1
使用 go mod download
而不是 go build
或 go build
与 go mod download
一起使用时,我遗漏了什么或无意中包含了什么?
解决方法
go mod download 的文档详细说明将下载所有依赖项,因为没有提供参数。
不带参数,下载适用于主要的所有依赖项 模块。
问题中的行似乎是 CI 作业完整说明的子集。 Circle CI documentation 中的示例建议了一个构建步骤,这是获取可执行文件所必需的。
任何 build 命令都允许选择有关依赖项的行为。正如所建议的,拥有单独的 go mod download
取决于环境的限制。
go mod download
下载所有依赖模块的源代码,并验证新下载模块的校验和。 (请注意,在 Go 1.18 中,我们plan to change go mod download
的行为,因此它可以只下载在主模块中构建包和测试所需的模块。)
go build
构建包。它会根据需要自动下载(并验证)模块源代码以构建这些包。在许多情况下,这组模块比 go mod download
下载的模块小得多。