问题出现步骤:
go build 进行打包。bin/sh ./xxx: no found
因为我在jenkins上使用了linux发行版本的go环境进行打包的,而我在jenkins跑可执行文件时,使用的alpine的go环境,可以理解是存在交叉编译了,两个环境不互通导致出的问题。
在跑 go build 命令时 加上 -tags netgo 即可,如下
go build -tags netgo -o xxx xxx.go
为什么会在打包编译时采用 linux 发行版的 go环境,而镜像构建时采用 alpine呢?
其实这里的考量主要是关注 镜像的构建大小问题,若是采用alpline的go环境镜像,镜像只有几M,若是采用linux发行版本来构建镜像,则镜像有几百M,所以一把使用docker构建go环境镜像时,一般都会采用aipine。