测试环境为了方便管理一直未直接在系统安装golang,编译项目是使用官方的golang镜像。但是编译速度很慢,和本地开发环境不一样,本地几秒,测试服务器用镜像编译需要至少1分钟。为了解决这个问题,我进行了一些研究。
go envGOCACHE
获取GOCACHE路径
golang:1.18-bullseyedocker run -itd golang:1.18-bullseye sh
进入容器shell。
# go env
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_arm64"
GOVCS=""
GOVERSION="go1.18.10"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1339762486=/tmp/go-build -gno-record-gcc-switches"
/root/.cache/go-build
修改编译脚本
在编译脚本中映射这个目录到项目目录中。
docker run --rm \
-v "${ROOT}/:/go" \
-v "${ROOT}/docker_work/go-build:/root/.cache/go-build" \
-w /go golang:1.18-bullseye bash ${SHELL_DIR_NAME}/build.sh "cmd/http/server.go" "${WORK_DIR_NAME}/${BUILD_TARGET_NAME}" "${TAG_DATA}"
验证
➜ docker run --rm \
-v "${PWD}/:/go" \
-v "/Users/yusen3/GOCACHE:/root/.cache/go-build" \
-w /go golang:1.18-bullseye bash docker/build.sh cmd/http/server.go go_program/server
2023-02-07 11:20:28
#### Go Build binary code ####
#### Copy config ####
#### Copy templates ####
#### Copy sh ####
#### Go Build success ####
2023-02-07 11:21:20
➜ docker run --rm \
-v "${PWD}/:/go" \
-v "/Users/yusen3/GOCACHE:/root/.cache/go-build" \
-w /go golang:1.18-bullseye bash docker/build.sh cmd/http/server.go go_program/server2
2023-02-07 11:22:02
#### Go Build binary code ####
#### Copy config ####
#### Copy templates ####
#### Copy sh ####
#### Go Build success ####
2023-02-07 11:22:20
看了一眼前后时间,设置路径之后,GOCACHE目录是空的时候编译要接近1分钟,下一次编译耗时就变成了18s,说明通过映射目录加速编译是生效的。