将Drone 8.5构建到容器中失败,并显示“无此文件或目录”

时间:2019-02-27 21:57:52

标签: docker drone drone.io

我有一个自动化的构建系统,我使用了drone.io 8.5文档进行构建,并将它们放置在一个脚本中,该脚本输出golang构建的二进制文件。

然后,我使用无人机(ha)构建最终在生产中使用的停放文件。

我正在尝试通过使用无人机来构建新的无人机容器来升级无人机,但它们都会以相同的错误摆动:

standard_init_linux.go:185: exec user process caused "no such file or directory"

在我看来,一切都在正确的地方。

我的构建脚本提取我想要的SHA,并执行构建步骤:

#! /bin/bash

set -e
set -u

PKG=github.com/drone/drone
REPO=https://${PKG}.git
SHA=81103a98208b0bfc76be5b07194f359fbc80183b
PATH=$GOPATH/bin:$PATH

cd $GOPATH
git clone $REPO src/${PKG}
cd src/${PKG}
git checkout -qf $SHA

# setup drone
go get -u github.com/drone/drone-ui/dist
go get -u golang.org/x/net/context
go get -u golang.org/x/net/context/ctxhttp
go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go

go install github.com/drone/drone/cmd/drone-agent
go install github.com/drone/drone/cmd/drone-server

mkdir release
cp $GOPATH/bin/drone-server release/drone-server

echo "Complete"

drone docker插件基于该版本的官方Dockerfile(版本8.5,如下所示)构建我的容器:

docker:
  image: plugins/docker
  repo: myprivatereg.com/org/docker-drone
  dockerfile: /drone/src/github.com/drone/drone/Dockerfile
  context: /drone/src/github.com/drone/drone
  tags:
    - ${DRONE_BRANCH}-latest
    - ${DRONE_COMMIT}

在这种情况下,Dockerfile是:

# docker build --rm -t drone/drone .

FROM drone/ca-certs
EXPOSE 8000 9000 80 443

ENV DATABASE_DRIVER=sqlite3
ENV DATABASE_CONFIG=/var/lib/drone/drone.sqlite
ENV GODEBUG=netdns=go
ENV XDG_CACHE_HOME /var/lib/drone

ADD release/drone-server /bin/

ENTRYPOINT ["/bin/drone-server"]

我一生都看不到这个问题,因为二进制文件似乎在正确的位置。唯一的问题是构建环境,但是我手动破坏了这些步骤,结果相同。

1 个答案:

答案 0 :(得分:0)

构建的问题是您没有构建可在docker容器内执行的二进制文件,因此发生了exec user process错误。

针对您的问题的快速解决方案是在您的go install中添加交叉编译标志。这也将导致二进制文件放置在稍有不同的位置,因此您的构建文件将如下所示:

GOOS=linux GOARCH=386 go install github.com/drone/drone/cmd/drone-agent
GOOS=linux GOARCH=386 go install github.com/drone/drone/cmd/drone-server

mkdir release
cp $GOPATH/bin/linux_386/drone-server release/drone-server

解决此问题的正确方法(以及更复杂的方法)是先使用具有构建步骤的多阶段Dockerfile,例如,参见this blog post和示例。