CircleCI vs Bitbucket Go Build Issue



我正在两个单独的 CI 工具上运行golang:1.11-alpinego build命令。如您所见,命令完全相同,docker 映像完全相同。

出于某种原因,当我在alpine:3.9docker 映像上运行编译的可执行文件时,只有bitbucket运行。

对于 Circle CI 构建,我收到以下错误:

standard_init_linux.go:207:exec 用户进程导致"exec 格式错误">

我在网上读到这可能是一个架构问题,所以我在终端中做了一个file <file>,似乎两者都以相同的方式编译。这是我收到的两个文件的回复(相同):

云:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接,解释器/lib/ld-musl-x86_64.so.1,剥离

圈子CI

docker:
- image: golang:1.11-alpine
steps:
- checkout
- run:
name: Build Go Server
command: |
apk add --no-cache git build-base
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"
go get -u github.com/golang/lint/golint@v0.0.0-20190227174305-8f45f776aaf1
go mod vendor
golint -set_exit_status $(go list ./... | grep -v /vendor/)
go test -short $(go list ./... | grep -v /vendor/)
go build -ldflags="-s -w"

Bitbucket CI

steps:
- step: &step-test-and-build-go
name: Test and Build Go Server
image: golang:1.11-alpine
script:
- apk add --no-cache git build-base
- export GOPATH="$HOME/go"
- export PATH="$PATH:$GOPATH/bin"
- go get -u github.com/golang/lint/golint@v0.0.0-20190227174305-8f45f776aaf1
- go mod vendor
- golint -set_exit_status $(go list ./... | grep -v /vendor/)
- go test -short $(go list ./... | grep -v /vendor/)
- go build -ldflags="-s -w"

圈子CIgo env

GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/root/project/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build122963699=/tmp/go-build -gno-record-gcc-switches"

位桶 CIgo env

GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/opt/atlassian/pipelines/agent/build/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build179086021=/tmp/go-build -gno-record-gcc-switches"

我已经将这个问题交叉发布到CircleCI论坛。

此问题可能与此相关。

在高山上设置CGO_ENABLED=0可能会解决它,除非您的构建需要它。要添加的行可能如下所示:export CGO_ENABLED=0

GOMOD="/root/project/go.mod">

好吧,考虑到两个环境之间只有一个差异的事实,我会说你的GOMOD值是罪魁祸首。

Bitbucket CI go env GOMOD="/opt/atlassian/pipelines/agent/build/go.mod">

顺便说一句,还要检查一下您的go版本,如果我没记错我的gopher琐事,模块在golang 1.6之前没有运行。

相关内容

  • 没有找到相关文章

最新更新