【发布时间】:2022-01-14 08:55:17
【问题描述】:
我有一个使用 go mod 和 CGO 的项目,它有一个相对较大的依赖树。
本地构建(GOOS=linux,GOARCH=amd64)工作正常。
使用我的自定义构建容器(包括 arm 在内的几种架构)在 CI(在我自己的运行器上)中构建大部分都可以,尽管我有时会在 go getting deps 时“挂起”。
使用相同的构建映像为arm 本地构建(由于CGO 和相应的依赖于arch 的C 工具链,我需要使用容器)现在给我以下错误(其中一个示例):
go: downloading github.com/go-co-op/gocron v1.9.0
scheduler/scheduler.go:7:2: github.com/go-co-op/gocron@v1.9.0: Get "https://goproxy.io/github.com/go-co-op/gocron/@v/v1.9.0.zip": net/http: TLS handshake timeout
但是,我可以看到(使用btop)在此错误之前qemu-arm 非常忙(800 CPU%)运行go 相关的构建任务(实际上是go mod tidy 进程)。
我的猜测是,这是因为找不到适合 arm 的特定模块的二进制文件,所以它只会即时构建它们。
所以我怀疑从源代码构建各个模块的时间被 go get 计算为正常的“从 http 获取”,这会导致观察到的超时。
因此,这意味着如果我能够增加 go get 的超时值,我就可以解决问题,但我没有找到任何相关信息。
有什么想法吗?
【问题讨论】:
标签: go arm cgo go-get cross-build