【问题标题】:go container build (arm) with CGO timeout with net/http: TLS handshake timeoutgo container build (arm) with CGO timeout with net/http: TLS 握手超时
【发布时间】:2022-01-14 08:55:17
【问题描述】:

我有一个使用 go modCGO 的项目,它有一个相对较大的依赖树。

本地构建(GOOS=linuxGOARCH=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


    【解决方案1】:

    您的 ISP 可能对访问 https://goproxy.io 地址有限制。您必须使用代理

    在终端中设置代理,如:

    export https_proxy=127.0.0.1:1080
    

    【讨论】:

    • CI 主机在 LAN 内运行,因此从 ISP 的角度来看,我的本地(开发)主机和 gitlab-runner(只是我 LAN 中的另一台服务器)之间没有区别。超时始终只发生在 arm 构建上,这涉及比我的原生架构更繁重的编译任务。
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2021-11-14
    • 2019-12-07
    • 2018-12-20
    • 2017-08-26
    • 2020-05-14
    • 2016-12-27
    • 2017-01-17
    相关资源
    最近更新 更多