CircleCI与Bitbucket Go构建问题

bry*_*yan 9 go circleci alpine-linux bitbucket-cli

我正在两个单独的CI工具上运行go build命令golang:1.11-alpine。如您所见,命令是完全相同的,而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"
Run Code Online (Sandbox Code Playgroud)

比特桶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"
Run Code Online (Sandbox Code Playgroud)

圈CI go 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"
Run Code Online (Sandbox Code Playgroud)

比特桶CI go 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"
Run Code Online (Sandbox Code Playgroud)

我已经将此问题交叉发布到CircleCI论坛

Con*_*dis 1

这个问题可能是相关的。

CGO_ENABLED=0除非您的构建需要,否则设置为 alpine 可能会解决这个问题。要添加的行可能类似于: export CGO_ENABLED=0